jquery - 滚动事件后无限循环

标签 jquery loops scroll infinite

我试图让 div 每次只滚动 70px,但是现在每次滚动我都会陷入无限循环。

我的函数中没有任何循环函数,但它以某种方式给了我无限循环:

var currentTop = 0;    
$('.contactDiv').on('scroll touchmove mousewheel', function(e){ 
    e.preventDefault();
    e.stopPropagation();

    currentTop = currentTop + 70;
    $('.contactDiv').animate({
        scrollTop: currentTop
    }, 500);

    return false;
});

我的代码有什么问题吗?

最佳答案

您可以使用这个技巧:定义一个 bool 变量scrolling,在执行动画时将其设置为 true,测试它,并在动画完成时将其设置回 false:

var currentTop = 0;    
var scrolling = false;

$('.contactDiv').on('scroll touchmove mousewheel', function(e){ 
    if (!scrolling) {
        e.preventDefault();
        e.stopPropagation();

        currentTop = currentTop + 70;

        scrolling = true;
        $('.contactDiv').animate({
            scrollTop: currentTop
        }, 500, function(){
            scrolling = false;
        });

        return false;
    }
});

编辑:
如果在动画结束后立即触发滚动事件,它确实会循环,直到到达 .contactDiv 的底部。但是,您可以使用额外的变量(此处称为 allowNextAnimation)来防止这种情况:

<强> jsFiddle demo

var currentTop = 0;    
var scrolling = false;
var allowNextAnimation = true;

$('.contactDiv').on('scroll touchmove mousewheel', function(e){
    if (!scrolling && allowNextAnimation) {
        currentTop = currentTop + 70;

        scrolling = true;
        $('.contactDiv').animate({
            scrollTop: currentTop
        }, 500, function(){
            scrolling = false;
            allowNextAnimation = false;
        });

        return false;
    }
    allowNextAnimation = true;
});

关于jquery - 滚动事件后无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26273386/

相关文章:

Android:检测软键盘打开

javascript - Jquery scrollTo 插件 : Scroll to an anchor

javascript - Accordion 网页滚动错误

javascript - 覆盖 Javascript 函数的参数对象

Linux:查找文件时使用文件夹名循环

mysql - 使用另一个数组循环遍历数组

c++ - 查找间接火车连接

javascript/jQuery - jQuery.fx 是什么?

jquery - 单击下拉菜单时打开所有子菜单

javascript - 从触发器导航到 ".hover"动画元素后,将其保留在屏幕上