我试图延迟页面滚动,所以如果我放一些动画,它就不会毁了。这是我的代码:
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()
无效。有什么办法我可以在滚动事件上加一些延迟吗?
答案 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 );
});