我正在使用
jquery-mousewheel插件来触发一个功能.
当我调用moveit时,我会分离监听器并等待动画完成,然后重新连接监听器.
问题是,当我重新连接它时,鼠标滚轮插件仍在听一些鼠标/触控板的惯性,并反复调用moveit.
我想在我的特定情况下,对函数调用进行去抖动或限制是不好的解决方案,因为惯性仍然存在,并且我还希望立即附加侦听器以用于其他可能的moveit调用.
有没有办法通过完全重置鼠标滚轮事件来“消除惯性”,而不是仅仅拆卸它?
- $(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();
- });
解决方法
在处理事件(或与DOM相关的任何操作)时使用标志,beacuse事件监听器通常可以表现为异步函数.
- $(document).ready(function () {
- var tween;
- var slide = $('#slide');
- var flag = true;
- function bodyListen () {
- $('body').on('mousewheel.bodyscroll',deltaY) {
- if(flag){
- e.preventDefault();
- flag = false;
- moveit();
- }
- });
- }
- function moveit () {
- tween = TweenMax.to(slide,onComplete: function(){
- flag = true;
- }
- });
- }
- bodyListen();
- });