【发布时间】:2022-01-04 23:37:29
【问题描述】:
我有一个网站,它本质上是四个 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?
...但无法在脚本与用户在滚动位置上发生争执,或严重的长时间延迟破坏“捕捉”效果之间取得平衡。
有什么建议可以实现吗?
【问题讨论】:
标签: javascript jquery scroll