用户滚动时停止当前scrollTo事件

Cam*_*ron 7 javascript jquery scrollto

我正在使用http://nick-jonas.github.io/windows/的修订版本,它允许用户在DIV中滚动不同的部分,然后将其重新捕捉到位.

因为我正在滚动DIV我已经替换了:

$('.windows').animate({scrollTop: scrollTo }, options.snapSpeed, function(){
                    if(!completeCalled){
                        if(t){clearTimeout(t);}
                        t = null;
                        completeCalled = true;
                        options.onSnapComplete($visibleWindow);
                    }
                });
Run Code Online (Sandbox Code Playgroud)

有:

$('.windows').scrollTo( $visibleWindow , options.snapSpeed, { onAfter:function(){
                    if(!completeCalled){
                        if(t){clearTimeout(t);}
                        t = null;
                        completeCalled = true;
                        options.onSnapComplete($visibleWindow);
                    }
                }});
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到我使用scrollTo插件跳转到可见的div而不是像前面的代码那样依赖复杂的偏移量.

我在原始代码和我自己的代码中注意到的一个错误是,如果捕捉已经开始,然后用户通过滚动来中断此操作,他们将最终与滚动事件进行战斗以滚动内容.因此,如果scrollTo向下滚动100个像素,然后他们尝试使用浏览器滚动条向上滚动300个像素,则屏幕将在事件和浏览器滚动战斗时出现问题.

关于如何阻止这一点的任何想法?我希望现在我正在使用scrollTo插件,它将变得更容易处理.

到目前为止,我尝试过:

$('.windows').bind("scroll mousedown DOMMouseScroll mousewheel keyup", function(e){
    if ( e.which > 0 || e.type === "mousedown" || e.type === "mousewheel"){
         $(this).stop().unbind('scroll mousedown DOMMouseScroll mousewheel keyup');
    }
});
Run Code Online (Sandbox Code Playgroud)

但是这样可以阻止所有的攻击......任何修复的想法?

joh*_*ith 15

你可以试试吗

$('.windows').bind("scroll mousedown DOMMouseScroll mousewheel keyup", function(e){
if ( e.which > 0 || e.type === "mousedown" || e.type === "mousewheel"){
     $('.windows').stop(true,false);
}
});
Run Code Online (Sandbox Code Playgroud)

语法是.stop([clearQueue],[jumpToEnd])