Я работаю над набором модулей электронного обучения, которые должны быть доступны в IE8 (из-за устаревшего оборудования в организации).Javascript: обработчик события mousemove не запускается
Все работает отлично в IE9>. В IE8 обработчик события mouseover не запускается. Вот соответствующие ЯШИ:
$(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 изображений изменяются, очевидно):
<div class="multi-choice-image-container" id="option1">
<img class="multi-choice-image" src="url/to/image.png">
</div>
<div class="multi-choice-image-container" id="option2">
<img class="multi-choice-image" src="url/to/image.png">
</div>
<div class="multi-choice-image-container" id="option3">
<img class="multi-choice-image" src="url/to/image.png">
</div>
<div class="multi-choice-image-container" id="option4">
<img class="multi-choice-image" src="url/to/image.png">
</div>
И, наконец, CSS, что делает изображение в полном размере (есть и другие правила что набор переполнение как скрытый, так что увеличенное изображение не распространяется на любые другие элементов):
.hover-magnification img {
width: auto;
height: 800px;
position: absolute;
}
Я включил класс добавляющих Js линию, потому что я могу видеть, что эти линии применяются - с изменяется количество изображений, которые меняются, и масштабируется до полного размера. Это функция mouseMoveHandler, которая НЕ запускается, поэтому изображения не корректируют свою позицию в зависимости от положения мыши.
ОК, так что мой простой вопрос, после всего этого, ПОЧЕМУ, обработчик mousemove не запускается в IE8? (Он отлично работает в 9+ и других браузерах).
'mousemouse'' mouseover' и 'mousemove' - это все разные вещи, и вы набрали все три из них. Есть ли опечатка в какой-либо другой части вашего кода? На всякий случай. Я вижу только «mousemove» в самом коде. –
Извините! Typos исправлено (надеюсь) и да, у меня есть декларация doctype. Я не хотел включать всю html-страницу, поскольку она очень длинная, и я не хотел, чтобы люди не читали! – moosefetcher
Не нужно извиняться. Я действительно надеялся, что ловить опечатку может решить вашу проблему :) –