0

我试图延迟页面滚动,所以如果我放一些动画,它不会毁掉。这是我的代码:

var lastScrollY = 0,
    delayFlag = true,
    delayTime = 1000;

$(window).on('scroll', function(e) {
    if(delayFlag == true) {
        delayFlag = false;
        var posY = $(this).scrollTop(),
            sectionH = $('.page').height(),
            multiplier = (Math.round(lastScrollY / sectionH));

        if(lastScrollY > posY) {
            $(window).scrollTop((multiplier - 1) * sectionH);
        }
        else {
            $(window).scrollTop((multiplier + 1) * sectionH);
        }

        lastScrollY = posY;

        setTimeout(function() { delayFlag = true }, delayTime);
    }
    else {
        e.preventDefault();
    }
});

jQuerypreventDefault()不工作。有什么办法可以延迟滚动事件吗?

4

2 回答 2

2

e.preventDefault();用于防止事件的默认动作。例如,点击一个锚点会导致页面导航到存储在锚点的href上的地址,调用e.preventDefault();锚点的点击事件会导致这个导航不会发生

e.preventDefault();但是,不会取消刚刚发生的事件。在表单输入事件中调用它onchange不会将其值恢复为原来的值,并且在滚动事件中调用它不会取消滚动。

于 2013-06-05T16:26:27.970 回答
1

虽然我不推荐这个,但从用户体验的角度来看(就我个人而言,我讨厌阻止我去网站某个地方的页面,所以我必须看他们的广告或你有什么,我很确定我不是只有一个...),您可以做的,而不是捕获滚动事件,是关闭该区域开始的滚动。

所以,有一些类似的东西(例如 jsFiddle:http: //jsfiddle.net/mori57/cmLun/):

在 CSS 中:

.noscroll {
    overflow:hidden;
}

在你的 JS 中:

var lastScrollY = 0,
    delayFlag = true,
    delayTime = 1000;

$(function(){
   $("body").addClass("noscroll"); 

    window.setTimeout(function(){
        $("body").removeClass("noscroll");
    }, delayTime );
});
于 2013-06-05T16:38:05.840 回答