抖动的鼠标滚轮水平滚动
jittery mousewheel horizontal scrolling
我目前正在研究一个平滑的水平鼠标滚轮滚动,Firefox 让我相当头疼。
基本上,每当触发将执行滚动的鼠标滚轮事件时,Firefox 都会以非常不同的值回复,就像在应该触发负事件的滚动中会触发奇数正值(即 30、40、43、-20、30、-4),尤其是在较小的移动中。 结果或多或少与预期结果相反, 可以想象。
有什么办法可以避免这种情况吗?我尝试过稍微限制它,但运动中失去流动性使其不行。
作为参考,滚动的代码:
var scroll = function(e, d){
console.log(d);
$('html, body').animate(
{scrollLeft: '-=' + d},
10
);
e.preventDefault();
e.returnValue = false;
}
$('html, body').bind('mousewheel', scroll);
我发现计算鼠标滚轮距离的最佳、最一致的方法是使用三个事件:mousewheel
、MozMousePixelScroll
和 DOMMouseScroll
。
最后两个事件是特定于 Mozilla 的,它们在不同的 FF 版本中可用。它们比mousewheel
事件更精确,但您需要调整增量以使速度标准化。这是我过去使用的一些代码:
演示:http://jsfiddle.net/6b28X/
var distance = 0;
var scroll = function(e){
e.preventDefault();
var original = e.originalEvent,
delta = 0,
hasPixelEvent = false;
// FF 3.6+
if ( 'HORIZONTAL_AXIS' in original && original.axis == original.HORIZONTAL_AXIS ) {
return; // prevents horizontal scroll in FF
}
if ( e.type == 'MozMousePixelScroll' ) {
hasPixelEvent = true;
delta = original.detail / -7;
// other gecko
} else if ( e.type == 'DOMMouseScroll' ) {
if ( hasPixelEvent ) {
return;
} else {
delta = original.detail * -3;
}
// webkit + IE
} else {
delta = original.wheelDelta / 7;
}
distance = Math.max(distance-delta, 0);
window.scrollTo( distance, 0 );
}
$(window).bind('mousewheel MozMousePixelScroll DOMMouseScroll', scroll);
相关文章:
- 如何创建一个具有固定左右列和水平滚动的表
- 通过水平滚动将页眉固定到页面顶部
- 具有Twitter引导程序的水平滚动表
- 如何避免鼠标水平滚动选项卡面板溢出
- 使用鼠标滚轮水平滚动页面
- 水平滚动不适用于jquery单击
- 每次单击按钮时水平滚动元素
- 简单的一页水平滚动
- 移动浏览器-如何删除拖动到水平滚动
- 如何避免在自由jqgrid中单击单元格进行水平滚动编辑
- 网站水平滚动,但单独的页面
- html表格的浮动水平滚动条
- 单击水平滚动库中的图像以居中显示无法工作的功能
- 移动/触摸屏幕 - 滑动时水平滚动
- 如何在水平滚动 Jquery 上实现延迟加载
- 具有无限水平滚动的流体可调整大小图像(修订版 2)
- visjs时间线的水平滚动条
- Chrome中无法进行水平滚动
- 水平滚动Marquee,当函数被调用时,我的文本坚持聚集在一起
- 在安卓系统中使用jquery Mobile中的水平滚动