当用户滚动页面时,我想向下滑动div直到它到达最终位置,然后让浏览器像往常一样滚动。
我的第一个想法就是重置scroll事件中的scrollTop,如下所示:
$(window).scroll(function() {
// 0 is the final position for `main`,
// Initially set to -390px
if(parseInt($('main').css('top')) < 0) {
$(window).scrollTop(0); // <-------- nothing should happen
// ... more stuff
}
});
在Firefox中运行良好。但是当我在Safari中测试时,它会导致可怕的“反弹效应”
显然,因为Safari首先向下滚动,然后由于scrollTop(0)
而将位置设置回来。
好的,另一个解决方案。为什么不将position: fixed
设置为html
和body
?例如:
$(window).scroll(function() {
if(parseInt($('main').css('top')) < 0) {
$('html, body').css('position', 'fixed'); // <-------- next try
// ... more stuff
}
});
知道了!在Safari中运行良好,让我们检查一下Firefox ......没有任何反应! Firefox只触发一次滚动事件,直到我将html和body设置为fixed。
所以这是我的问题:如何避免垂直滚动跨浏览器,没有光学副作用并仍然得到滚动事件?