2015-10-09 2 views
8

При использовании колеса мыши для прокрутки страницы событие mouseleave не запускается в IE11 до тех пор, пока курсор не будет перемещен. Прекрасно работает в Google Chrome.событие mouseleave не срабатывает при прокрутке колесика мыши в IE11

jsFiddle: http://jsfiddle.net/tonyleeper/5vwf65f7/

HTML

<div class="box">Move the mouse cursor inside this box and observe the mouseenter event fires (background goes green). Next, use the mouse wheel to scroll down without moving the mouse cursor position, observe the mouseleave event doesn't fire. Finally, move the mouse cursor even a little, say 1px, and observe that the mouseleave event then fires</div> 

CSS

.box { 
    font-family: arial; 
    font-size: 16px; 
    width: 300px; 
    height: 200px; 
    background-color: #000077; 
    color: #ffffff; 
} 

JavaScript

var box = document.getElementsByClassName('box')[0]; 

box.addEventListener('mouseenter', function (e) { 
    document.body.setAttribute('style', 'background-color: #007700'); 
}); 

box.addEventListener('mouseleave', function (e) { 
    document.body.setAttribute('style', 'background-color: #ffffff'); 
}); 

Существуют ли какие-либо известные способы обхода этого способа, чтобы заставить событие срабатывать при прокрутке?

JQuery, как представляется, имеют один и тот же вопрос: https://api.jquery.com/mouseleave/

+0

Очевидная разница заключается в IE не обновляет позицию мыши после прокрутки, в то время как хром делает. Запуск mousemove, похоже, не работает, чтобы заставить его обновлять ... –

+1

Я использую chrome version 45.0.2454.101, и это то же поведение, что и IE11 - не обновляется при прокрутке и не перемещении мыши. Это может быть ожидаемое поведение. – Shahar

+0

@Shahar Это странно, я тоже на Chrome 45.0.2454.101, и я вижу, что поведение отличается от IE, прокручивая огни mouseleave – magritte

ответ

1

Вы можете поместить свой слушателя в функцию, а также прикрепить scroll EventListener. Там вы можете проверить, если курсор мыши не «внутри» 'box' и вызвать соответствующую функцию:

var triggerOnMouseLeave = function(e) { 
    document.body.setAttribute('style', 'background-color: #ffffff'); 
} 

box.addEventListener('mouseleave', triggerOnMouseLeave); 

var triggerOnScroll = function(e) { 
    // Using jQuery here 
    if (!$(box).is(':hover')) { 
     triggerOnMouseLeave(); 
    } 
} 

window.addEventListener('scroll', triggerOnScroll); 
+0

Спасибо LuudJacobs, это в значительной степени то, что я в конечном итоге сделал, чтобы обойти это. – magritte

Смежные вопросы