编辑:
我弄清楚了问题的原因。当您使用滚动条滚动,然后以编程方式设置滚动时,滚动条会移动,这会导致浏览器根据鼠标相对于新滚动条位置的位置重新计算滚动位置。现在我正在寻找解决方案。 这是使用来自以下答案之一的代码的问题的 Youtube 视频。
原帖:
我试图实现窗口以等于网格中元素大小的增量滚动的效果,以便滚动看起来平滑。元素是 40px 正方形,有 4px 的填充,所以我试图以 44px 的增量滚动页面。我写了一些代码,当页面垂直滚动时效果很好。我已经为水平滚动设置了完全相同的操作(或者我认为),但是当我水平滚动时,页面来回抖动。我已经尝试过调试它,似乎每隔一秒或第三次调用滚动处理程序时,向左滚动的窗口就会被设置为一些看似随机的值。
这是代码(和小提琴):
$(function(){
// Here is the scroll function in question
$(window).scroll(function(){
var lastScrollTop = $(window).scrollTop();
var lastScrollLeft = $(window).scrollLeft();
return function(){
var scrollTop = $(this).scrollTop();
var scrollLeft = $(this).scrollLeft();
var yDir = scrollTop - lastScrollTop > 0 ? 1 : -1;
var xDir = scrollLeft - lastScrollLeft > 0 ? 1 : -1;
$(this).scrollTop(~yDir ? scrollTop + ((44 - ((scrollTop + 44) % 44))) : scrollTop - (scrollTop % 44));
$(this).scrollLeft(~xDir ? scrollLeft + ((44 - ((scrollLeft + 44) % 44))) : scrollLeft - (scrollLeft % 44));
scrollTop = lastScrollTop = $(this).scrollTop();
scrollLeft = lastScrollLeft = $(this).scrollLeft();
}
}());
});
编辑:
我正在 Chrome 26.0.1410.65 btw 中对此进行测试。
编辑:
垂直滚动也会出现问题,但仅在使用滚动条而不是鼠标滚轮时才会出现。