jQuery Scroll Timeout

时间:2013-06-05 16:21:36

标签: javascript jquery scroll

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

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();
    }
});

jQuery preventDefault()无效。有什么办法我可以在滚动事件上加一些延迟吗?

2 个答案:

答案 0 :(得分:2)

e.preventDefault();用于阻止事件的默认操作。例如,单击锚点将导致页面导航到锚点href上存储的地址,并且在锚点击事件中调用e.preventDefault();将导致此导航不发生。 / p> 但是,

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

答案 1 :(得分: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 );
});