您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

跨浏览器标准化鼠标滚轮速度

跨浏览器标准化鼠标滚轮速度

鉴于:

…我只能建议使用以下基于符号的简单计数代码

var handleScroll = function(evt){
  if (!evt) evt = event;
  var direction = (evt.detail<0 || evt.wheelDelta>0) ? 1 : -1;
  // Use the value as you will
};
someEl.addEventListener('DOMMouseScroll',handleScroll,false); // for Firefox
someEl.addEventListener('mousewheel',    handleScroll,false); // for everyone else

最初的尝试是正确的。

这是我第一次尝试对值进行规范化的脚本。它在OS X上有两个缺陷:OS X上的Firefox生成的值应为应有值的1/3,而OS X上的Chrome生成的值应为应有值的1/40。

// Returns +1 for a single wheel roll 'up', -1 for a single roll 'down'
var wheelDistance = function(evt){
  if (!evt) evt = event;
  var w=evt.wheelDelta, d=evt.detail;
  if (d){
    if (w) return w/d/40*d>0?1:-1; // Opera
    else return -d/3;              // Firefox;         TODO: do not /3 for OS X
  } else return w/120;             // IE/Safari/Chrome TODO: /3 for Chrome OS X
};

:@Tom的一个建议是简单地将每个事件调用计为一次移动,并使用距离的符号对其进行调整。在OS X上平滑/加速滚动时,这不会产生很好的效果,也不能很好地处理鼠标滚轮快速移动(例如wheelDelta240)的情况,但是这种情况很少发生。由于此处描述的原因,现在该代码是此答案顶部显示的推荐技术。

其他 2022/1/1 18:15:57 有502人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶