禁用滚动但使用JavaScript捕获滚动数据?

时间:2015-06-19 12:08:22

标签: javascript jquery

我还在尝试阻止默认滚动行为,同时仍然确定用户尝试滚动的像素数。

我的目标是(在我的页面上的某个垂直位置)将导航元素固定到屏幕顶部并劫持滚动/滑动事件以在用户向上滚动时拉下移动菜单(因此移动所述元素上下移动 n 像素,具体取决于用户尝试滚动的像素数)。

我知道在阻止原生行为方面存在用户体验/可访问性问题,但这些诉讼需要西装想要的东西。

到目前为止,我有:

$('body').on({
 'mousewheel' : function(e) {
    e.preventDefault(); 
    e.stopPropagation();
 }
}); 

但是我很难理解如何访问滚动的像素数(因为元素/滚动偏移不再是指南)。

编辑:请注意,此问题专门询问有关滚动被阻止时鼠标/滚动操作的信息。不要认为这已被适当标记为重复。

2 个答案:

答案 0 :(得分:5)

由于您使用的mousewheel事件,这是浏览器所依赖的。这是因为它是non-standard。不要使用它!

在Chrome(43.0)中,您可以获得具有不同值的不同属性:

e.originalEvent.wheelDelta: -120
e.originalEvent.wheelDeltaY: -120
e.originalEvent.deltaY: 100

在IE(11.0)中,您只能获得一个属性:

e.originalEvent.wheelDelta: -120

在Firefox(38.0.5)中,捕鼠轮事件根本不起作用。

<强>解决方案:
使用wheel事件(MDN reference)。此事件在所有浏览器中都具有e.originalEvent.deltaY属性。

答案 1 :(得分:2)

在取消事件传播之前,请将deltaY从原始事件中取出,如this

$('body').on({
  'wheel' : function(e) {
      console.log(e.originalEvent.deltaY);
      e.preventDefault(); 
      e.stopPropagation();
 }
});