Sto utilizzando il plug-in jquery-mousewheel per attivare una funzione.Staccare e riattaccare il listener di eventi della rotellina di mouse non ripristinare l'inerzia dello scorrimento
Quando chiamo moveit Scollego il listener e attendo che l'animazione sia completata, quindi ricollego il listener.
Il problema è che quando lo ricollego, il plugin della rotellina del mouse sta ancora ascoltando l'inerzia di alcuni mouse/trackpad e chiama lo moveit ripetutamente.
Credo che debouncing o strozzamento la chiamata di funzione non sono buone soluzioni nel mio caso specifico, perché l'inerzia è ancora lì, e voglio anche all'ascoltatore di essere attaccato immediatamente per altri possibili moveit chiamate.
C'è un modo per "uccidere l'inerzia" resettando completamente l'evento della rotellina del mouse, invece di staccarlo solo?
$(document).ready(function() {
var tween;
var slide = $('#slide');
function bodyListen() {
$('body').on('mousewheel.bodyscroll',
function (e, delta, deltaX, deltaY) {
e.preventDefault();
$('body').off('mousewheel.bodyscroll');
moveit();
});
}
function moveit() {
tween = TweenMax.to(slide, 0.8, {
marginLeft: 300,
onComplete: bodyListen
});
}
bodyListen();
});
Sei arrivato da qualche parte con questo? – iamdarrenhall
@dazhall purtroppo ho dovuto adottare una soluzione alternativa, come fanno tutti. Ho semplicemente ritardato il riaggancio dell'ascoltatore della rotellina della ruota :( – Luke
Perché non aggiungere solo un flag globale invece di staccare il listener di eventi? Se il flag è attivo, il listener non fa nulla, altrimenti fa quello che deve. –