2015-10-09 8 views
8

Podczas przewijania w dół strony za pomocą kółka myszy zdarzenie mouseleave nie uruchamia się w IE11, dopóki kursor nie zostanie przesunięty. Działa dobrze w Google Chrome.Zdarzenie mouseleave nie jest uruchamiane przy przewijaniu kółka myszy w 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'); 
}); 

Czy są jakieś znane sposoby obejścia tego problemu, aby wymusić uruchomienie zdarzenia przewijania?

jQuery wydaje się mieć ten sam problem: https://api.jquery.com/mouseleave/

+0

Widoczna różnica jest IE nie aktualizuje pozycji myszy po przewinięciu, natomiast chrom robi. Wyzwalanie mousemove wydaje się nie działać, aby wymusić aktualizację ... –

+1

Używam wersji chrome 45.0.2454.101 i to samo zachowanie co IE11 - nie aktualizuje się podczas przewijania i nie poruszania myszą. To może być oczekiwane zachowanie. – Shahar

+0

@Shahar To dziwne, jestem również w Chrome 45.0.2454.101 i widzę, że zachowanie różni się od IE, przewijanie fajerwerków mouseleave – magritte

Odpowiedz

1

można umieścić swój słuchacza do funkcji, a także załączyć scroll EventListener. Nie można sprawdzić, czy kursor myszy jest nadal „wewnątrz” 'box' i wywołać odpowiednią funkcję:

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

Dzięki LuudJacobs, to jest to, co w końcu robiłem, aby obejść to. – magritte

Powiązane problemy