我有一个网站,基本上是四个 div - 每个都设置为窗口的高度,因此总文档是窗口高度的四倍。
这个想法是单击 div 将滚动推进一个“窗口高度” - 这很好,如下所示:
// on click event
if(cur_frame<number_slides){
scrolling = true;
$('html,body').animate({scrollTop:window_height*cur_frame},function(){
scrolling=false;
});
}
但是,在用户手动滚动页面后,我想将位置“捕捉”到最接近的窗口高度倍数 - 所以给定的 div 再次在屏幕上居中。我尝试使用超时,认为一个小的延迟会阻止它每秒触发一千次......
// on scroll event
clearTimeout(scroll_timer);
if(!scrolling) scroll_timer = setTimeout(function(){
if(cur_scroll!=window_height*(cur_frame-1)) {
scrolling = true;
$('html,body').stop().animate({scrollTop:window_height*(cur_frame-1)},function(){
scrolling = false;
});
}
},100); //20? 400? 1000?
...但是无法在脚本与用户在滚动位置上的争斗或严重的长时间延迟之间取得平衡,从而破坏了“捕捉”效果。
有什么建议可以如何实现?