附加鼠标滚轮事件监听器不重置滚动惯量

我使用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相关的任何操作)时使用标志,因为事件监听器通常可能表现得像异步函数一样。

$(document).ready(function () {

    var tween;
    var slide = $('#slide');
    var flag = true;

    function bodyListen () {
        $('body').on('mousewheel.bodyscroll',
        function (e, delta, deltaX, deltaY) {
            if(flag){
                e.preventDefault();
                flag = false;
                moveit();
            }
        });
    }

    function moveit () {
        tween = TweenMax.to(slide, 0.8, {
            marginLeft: 300,
            onComplete: function(){
                flag = true;
            }
        });
    }

    bodyListen();
});

虽然我自己没有尝试过,但TweenMax已经杀死了Tweens和KillAll,它们可以让你杀死一个补间,并在你选择之前选择补间。 也许不是你想要的,因为它会迫使动画完成,但它会让你回到你想要的状态,并且代码插入很简单。 在函数bodyListen的开头

function bodyListen() {
    if(tween) tween.killAll(true)
    .....
链接地址: http://www.djcxy.com/p/74473.html

上一篇: attach mousewheel event listener don't reset scroll inertia

下一篇: In AngularJS, how do I optionally wrap item in a link