2013-07-15 12 views
11

Mam problem z ustawieniem overflow-x: hidden na html i elementach body uniemożliwia odpalenie zdarzenia jquery scroll.overflow-x: ukryty zrywa przerwanie jquery scroll

CSS:

html, body { 
    overflow-x: hidden; 
} 

JS:

$(function(){ 
    $(window).on("scroll", function(e){ 
    console.log("scrolling");  
    }); 
}); 

http://jsfiddle.net/r7Fqq/6/

Wypróbuj go dla siebie: komentarz na przepełnienie-x: hidden i pop otworzyć konsolę. Powinieneś zobaczyć "przewijanie" rejestrowane podczas przewijania w górę iw dół pola html. Skomentuj go ponownie, a wydarzenie przewijania jest ciche.

Czy ktoś wie, dlaczego tak się dzieje? Zdaję sobie sprawę, że po ustawieniu przepełnienia na ukryty wyłącza przewijanie, ale powinno to robić tylko dla osi, którą ustawiasz (x tylko w tym przypadku). Z góry dziękuję za pomoc.

+2

jak o '$ ('body'). Na ('scroll')'? – Chad

+2

Dokładniej, twoje okno nie przewija się, twój html/body są. Jeśli usuniesz 'height: 100%;' twoje przewijanie okna będzie działało poprawnie. – Chad

+1

po ustawieniu overflow-x: hidden, pasek przewijania, który widzisz, dotyczy ciała. Zmniejsz wysokość, a zobaczysz dwa paski przewijania, jeden dla ciała i jeden dla okna. Więc ... co Torr3ent powiedział. http://jsfiddle.net/r7Fqq/7/ –

Odpowiedz

1
$(function() { 
    $(window).bind('mousewheel', function(event, delta) { 
     console.log("mousewheel"); 
     return false; 
    }); 
}); 
12

Miał ten sam problem. Rozwiązaniem jest usunięcie overflow-x: ukryte w elemencie HTML i pozostawienie go tylko na elemencie body i powinno działać.

+1

Tak. Pracował dla mnie. Nie mam pojęcia, dlaczego myśl. Teoretycznie 'overflow-x' powinien wpływać tylko na przewijanie w poziomie, czyż nie? – jeteon

+0

W przeciwnym razie pozostaw go tylko na 'html'. – Alex78191

+0

Występowały problemy z wykrywaniem zdarzenia przewijania okna podczas stylizowania stylów przewijania 'html' i' body' ze stylami przewijania z przepełnieniem. –

0

Zestaw body {height: 100%;} w css. Wtedy by działało. Możesz zastosować właściwość przepełnienia na div, a nie na całym ciele, a następnie odpowiednio zmienić kod JS. Ustawienie właściwości przepełnienia na ciele powoduje utratę zdolności przewijania. Innym rozwiązaniem może być wykorzystanie zdarzenia koła Jquery opisanego w tym artykule (https://stackoverflow.com/a/8378946/5348972).

0

Też znalazłem, że tak jest. Gdy dodaliśmy:

body { 
    overflow-x: hidden; 
} 

wszystkie window.addEventListener('scroll') zdarzenia zatrzymane wyzwalanie. Uważam, że dzieje się tak dlatego, że zdarzenie przewijania nie zostało przeniesione do document.body. Kiedy zmienię eventListener na document.body.addEventListener('scroll'), wszystko znów zacznie działać. Interesujące jest to, że moje event.bubbles boolean jest fałszywe. Z tego, co przeczytałem, zdarzenie przewijania powinno być wyświetlane w oknie.

Rozwiązanie

zmiana

window.addEventListener('scroll',() => console.log('MEOW')) 

do

document.body.addEventListener('scroll',() => console.log('MEOW'))