2013-07-15 5 views
11

Ho riscontrato un problema in cui l'impostazione overflow-x: hidden sugli elementi html e body impedisce l'attivazione dell'evento jquery scroll.overflow-x: hidden interrompe jquery scroll event

CSS:

html, body { 
    overflow-x: hidden; 
} 

JS:

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

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

provare di persona: come commento di overflow-x: nascosto e pop aprire la console. Dovresti vedere lo "scorrimento" registrato mentre scorri verso l'alto e verso il basso nella casella html. Commentalo nuovamente e l'evento di scorrimento è silenzioso.

Qualcuno sa perché questo sta accadendo? Sono consapevole del fatto che quando si imposta overflow su hidden disabilita lo scrolling, ma dovrebbe farlo solo per l'asse che si sta impostando (x solo in questo caso). Grazie in anticipo per qualsiasi aiuto.

+2

ne dite '$ ('body'). On ('scroll')'? – Chad

+2

In particolare, la tua finestra non sta scorrendo, il tuo html/body sono. Se rimuovi l'altezza: 100%; lo scorrimento della finestra funzionerà correttamente. – Chad

+1

quando si imposta overflow-x: hidden, la barra di scorrimento che si vede è per il corpo. Riduci l'altezza e vedrai due barre di scorrimento, una per il corpo e una per la finestra. Quindi ... cosa ha detto Torr3ent. http://jsfiddle.net/r7Fqq/7/ –

risposta

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

Aveva lo stesso problema. La soluzione è rimuovere l'overflow-x: nascosto dall'elemento html e lasciarlo solo sull'elemento body e dovrebbe funzionare.

+1

Sì. Ha funzionato per me Non ho idea del perché il pensiero. In teoria, 'overflow-x' dovrebbe influenzare solo lo scorrimento orizzontale, no? – jeteon

+0

Altrimenti, lascialo solo su 'html'. – Alex78191

+0

Si sono verificati problemi con il rilevamento dell'evento di scorrimento della finestra quando si impostano sia 'html' che' body' con gli stili di scorrimento di overflow. –

0

Impostare body {height: 100%;} in css. Funzionerebbe allora. È possibile che si desideri applicare la proprietà di overflow su una divisione rispetto a tutto il corpo e quindi modificare di conseguenza il codice JS. L'impostazione di una proprietà di overflow sul corpo toglie la sua capacità di scorrimento. Un'altra soluzione può essere l'utilizzo di un evento wheel Jquery come descritto in questo post (https://stackoverflow.com/a/8378946/5348972).

0

Ho anche trovato questo il caso. Quando abbiamo aggiunto:

body { 
    overflow-x: hidden; 
} 

tutti window.addEventListener('scroll') eventi smesso di attivazione. Credo che sia perché l'evento di scorrimento non viene spostato allo document.body. Quando cambio eventListener su document.body.addEventListener('scroll'), le cose ricominciano a funzionare. La cosa interessante è che il mio evento.bubbles boolean è falso. Da quello che ho letto, l'evento di scorrimento dovrebbe apparire come una bolla alla finestra.

Soluzione

cambiamento

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

a

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