滚动 jQuery
Scrolling jQuery
我有一些代码应该在每次以某种方式触发滚动时滚动一个页面高度。我希望它只滚动一个高度,并且 "pause" 触发器直到滚动完成。但是,我的脚本不会停止,而是会立即向下滚动。向上滚动似乎效果更好...
这是我的脚本:
var lastScroll = 0;
var scrollPos = 0;
var blockScroll = 0;
$(window).scroll(function() {
var scroll = $(this).scrollTop();
if(blockScroll == 0) {
blockScroll = 1;
if(scroll > lastScroll){
// Down
scrollPos++;
console.log(scrollPos+"-"+blockScroll);
$("html, body").animate({scrollTop:$(window).height()*scrollPos}, 'slow', function() {
blockScroll = 0;
});
} else {
// Up
scrollPos--;
console.log(scrollPos);
$("html, body").animate({scrollTop:$(window).height()*scrollPos}, 'slow', function() {
blockScroll = 0;
});
}
}
lastScroll = scroll;
});
blockScroll 在滚动事件出现时设置,在滚动动画停止时取消设置。作为一把锁。我不确定这是否按照我想要的方式工作......有人能看出这有什么明显的问题吗? jQuery 是异步的,我有问题吗?
看来 animate
本身正在触发滚动事件,因此当它完成时,它会触发最后一个滚动事件,从而重新启动进程。
似乎在回调中添加一个小超时解决了问题:
setTimeout(function () {blockScroll = 0;}, 50)
我有一些代码应该在每次以某种方式触发滚动时滚动一个页面高度。我希望它只滚动一个高度,并且 "pause" 触发器直到滚动完成。但是,我的脚本不会停止,而是会立即向下滚动。向上滚动似乎效果更好...
这是我的脚本:
var lastScroll = 0;
var scrollPos = 0;
var blockScroll = 0;
$(window).scroll(function() {
var scroll = $(this).scrollTop();
if(blockScroll == 0) {
blockScroll = 1;
if(scroll > lastScroll){
// Down
scrollPos++;
console.log(scrollPos+"-"+blockScroll);
$("html, body").animate({scrollTop:$(window).height()*scrollPos}, 'slow', function() {
blockScroll = 0;
});
} else {
// Up
scrollPos--;
console.log(scrollPos);
$("html, body").animate({scrollTop:$(window).height()*scrollPos}, 'slow', function() {
blockScroll = 0;
});
}
}
lastScroll = scroll;
});
blockScroll 在滚动事件出现时设置,在滚动动画停止时取消设置。作为一把锁。我不确定这是否按照我想要的方式工作......有人能看出这有什么明显的问题吗? jQuery 是异步的,我有问题吗?
看来 animate
本身正在触发滚动事件,因此当它完成时,它会触发最后一个滚动事件,从而重新启动进程。
似乎在回调中添加一个小超时解决了问题:
setTimeout(function () {blockScroll = 0;}, 50)