Javascript:未触发mousemove事件处理程序
我正在开发一套必须在IE8中可以访问的电子学习模块(由于组织中的遗留硬件) 在IE9>中一切正常。在IE8中,mouseover事件处理程序没有触发。以下是相关的js:Javascript:未触发mousemove事件处理程序,javascript,html,css,internet-explorer-8,Javascript,Html,Css,Internet Explorer 8,我正在开发一套必须在IE8中可以访问的电子学习模块(由于组织中的遗留硬件) 在IE9>中一切正常。在IE8中,mouseover事件处理程序没有触发。以下是相关的js: $(document).ready(function() { $imageOptions = $('.multi-choice-image-container'); $imageOptions.each(function() { $(this).hover(addHover, removeHove
$(document).ready(function() {
$imageOptions = $('.multi-choice-image-container');
$imageOptions.each(function() {
$(this).hover(addHover, removeHover);
})
});
function addHover(ev) {
ev = ev || window.event;
// add conditional class
var $image;
if (ev.target.tagName=="IMG") {
$image = $(ev.target).parent(); // if event has been triggered from image as opposed to the containing div, get the parent object
} else {
$image = $(ev.target);
}
if (!$image.hasClass('hover-magnification')) {
$image.addClass('hover-magnification');
$hoveredImageContainer = $image;
hoveredImageRect = $hoveredImageContainer[0].getBoundingClientRect();
var hoveredImageRectWidth = hoveredImageRect.right - hoveredImageRect.left;
var hoveredImageRectHeight = hoveredImageRect.bottom - hoveredImageRect.top;
hoveredXMultiplier = (400 - hoveredImageRectWidth) / hoveredImageRectWidth;
hoveredYMultiplier = (800 - hoveredImageRectHeight) / hoveredImageRectHeight;
$hoveredImage = $hoveredImageContainer.find('.multi-choice-image');
}
if (document.body.addEventListener) {
document.body.addEventListener('mousemove', mouseMoveHandler);
} else {
document.body.attachEvent('mousemove', mouseMoveHandler);
}
}
function removeHover(ev) {
ev = ev || window.event;
var $image;
if (ev.target.tagName=="IMG") {
$image = $(ev.target).parent();
} else {
$image = $(ev.target);
}
$image.removeClass('hover-magnification');
if (document.body.removeEventListener) {
document.body.removeEventListener('mousemove', mouseMoveHandler);
} else {
document.body.detachEvent('mousemove', mouseMoveHandler);
}
$hoveredImageContainer = null;
}
function mouseMoveHandler(ev) {
console.log("this function is not firing");
ev = ev || window.event;
if ($hoveredImageContainer!=null) {
var scroll = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);
var xPos = ev.pageX - hoveredImageRect.left;
var yPos = ev.pageY - (hoveredImageRect.top+scroll);
$hoveredImage.css('left', -((xPos) * hoveredXMultiplier) +'px').css('top', -((yPos) * hoveredYMultiplier) + 'px');
}
}
还有一些非常简化的html(显然,图像URL发生了改变):
我加入了添加js行的类,因为我可以看到这些行正在被应用——所包含图像的类会发生变化,并缩放到完整大小。mouseMoveHandler函数不会被触发,因此图像不会根据鼠标位置调整其位置
好的,我的简单问题是,毕竟这是为什么mousemove处理程序在IE8中没有触发?(它在9+和其他浏览器中运行良好)。正常。对于有相同问题的人来说,IE8需要触发“onmousemove”,而不是触发“mousemove”。因此:
if (document.body.addEventListener) {
document.body.addEventListener('mousemove', mouseMoveHandler);
} else {
document.body.attachEvent('onmousemove', mouseMoveHandler);
}
嗯。对于有相同问题的人来说,IE8需要触发“onmousemove”,而不是触发“mousemove”。因此:
if (document.body.addEventListener) {
document.body.addEventListener('mousemove', mouseMoveHandler);
} else {
document.body.attachEvent('onmousemove', mouseMoveHandler);
}
mousemouse
mouseover
和mousemove
都是不同的东西,您已经键入了这三个。代码的其他部分是否有输入错误?以防万一。我只在代码中看到mousemove
。对不起!拼写错误更正(我希望如此),是的,我有doctype声明。我不想包括整个html页面,因为它很长,我不想让人们不去阅读!没必要道歉。事实上,我希望抓到一个打字错误可以解决你的问题:)mousemouse
mouseover
和mousemove
都是不同的东西,你已经输入了这三个。代码的其他部分是否有输入错误?以防万一。我只在代码中看到mousemove
。对不起!拼写错误更正(我希望如此),是的,我有doctype声明。我不想包括整个html页面,因为它很长,我不想让人们不去阅读!没必要道歉。事实上,我希望抓到一个打字错误可以解决你的问题:)
if (document.body.addEventListener) {
document.body.addEventListener('mousemove', mouseMoveHandler);
} else {
document.body.attachEvent('onmousemove', mouseMoveHandler);
}