javascript - 如何检测用户鼠标滚轮滚动距离?

标签 javascript jquery scroll

我正在尝试检测用户滚动,如果向左和向右滚动则触发并执行某些操作。 但是,如果用户使用触控板滚动到顶部或底部,那么它会意外地向左或向右滚动。

我认为,可能不只是检查每次滚动定义的计时器还需要检查用户滚动距离是否小于 20,我们可以将其区分为意外并且不做任何事情。

我找不到检查用户滚动距离的方法,元素不可滚动,所以不能使用 scrollTop scrollLeft....

有什么想法吗?

var scroll_timer;

$('img').bind('mousewheel', function(e) {
    if (e.originalEvent.wheelDeltaX < 0) {
        clearTimeout(scroll_timer);
        scroll_timer = setTimeout(function() {
            // .. do something
            // console.log('right');
        }, 200);
    } else if (e.originalEvent.wheelDeltaX > 0) {
        clearTimeout(scroll_timer);
        scroll_timer = setTimeout(function() {
            // .. do something
            // console.log('left');
        }, 200);
    }
});

这是我的 JSFiddle

最佳答案

看起来您可以使用 e.originalEvent.wheelDeltaX 获取滚动距离值。然后,您可以使用 e.originalEvent.wheelDeltaY 来查看用户是否垂直滚动多于水平滚动,并在为真时触发内容。

这是一个演示,它通过测试滚动 Y 的值是否小于滚动 X 的值然后允许您在它位于左侧或右侧时触发。似乎可以在我的 Mac 触控板上使用

var scroll_timer;

$('img').bind('mousewheel', function(e) {

    if((Math.abs(e.originalEvent.wheelDeltaX) > Math.abs(e.originalEvent.wheelDeltaY)))
    {
        if (e.originalEvent.wheelDeltaX < 0) {
            clearTimeout(scroll_timer);
            scroll_timer = setTimeout(function() {
                // .. do something
                console.log('right');
            }, 200);
        } else if (e.originalEvent.wheelDeltaX > 0) {
            clearTimeout(scroll_timer);
            scroll_timer = setTimeout(function() {
                // .. do something
                console.log('left');
            }, 200);
        }
    }
});

http://jsfiddle.net/andyface/5CfgT/

关于javascript - 如何检测用户鼠标滚轮滚动距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23469303/

相关文章:

javascript - Typed.js - 除非用户与滚动条交互,否则随着 div 大小的增加,保持 div 滚动到底部?

angular - mat-menu 向下滚动,页面位于固定底部导航上,仅限移动设备和 Chrome

javascript - 如何在加载 Vue 时淡入图像

javascript - 如何使按钮在单击时改变颜色,然后在单击不同的按钮时变回原来的颜色?

jquery - 当 contenteditable 从 true 设置为 false 时,哪些 css 属性会发生变化?

python - 结合 django-filter DateTimeFromToRangeFilter 和 DateTimeInput(datepicker)

javascript - 如何在 MongoDB 中更新多个对象但使用相同的数据?

javascript - 如何在 native react 中将 stackNavigation 与抽屉导航一起使用并在 stackNavigation 组件中使用toggleDrawer()

javascript - 使用 axios 使用签名链接将图像放入 Digital Ocean 空间时出现 "SignatureDoesNotMatch"

c# - 鼠标滚轮在 winforms 中冒泡?