JQuery / JS:检测用户的滚动尝试,没有任何窗口溢出滚动到

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JQuery / JS:检测用户的滚动尝试,没有任何窗口溢出滚动到相关的知识,希望对你有一定的参考价值。

我正在转换网站,虽然我想使用用户的滚动尝试作为转换启动器,但我不希望有一个窗口滚动条。

现在,我只是检测到用户滚动(我的窗口大小比滚动条的用户屏幕高1px,尽管这是我试图避免的)jquery的

.scroll(function)

方法,并使用它来转换我的页面,但我想检测用户的滚动尝试,而不必让我的页面溢出一个像素,从而显示滚动条

如何才能做到这一点?

我知道凌乱的补丁可能性:

将窗口定位在外部包装器中并将滚动条隐藏在包装器的溢出中。这是一个补丁工作而不是解决方案。它导致页面内容偏离中心,因为并非所有浏览器的滚动条使用相同的宽度。

答案

看看这个question。我用它作为参考来制作这个fiddle

Works only in Firefox

$('html').on ('DOMMouseScroll', function (e) {
    var delta = e.originalEvent.detail;

    if (delta < 0) {
        $('p').text ('You scrolled up');
    } else if (delta > 0) {
        $('p').text ('You scrolled down');
    }

});

Works in Chrome, IE, Opera and Safari

$('html').on ('mousewheel', function (e) {
    var delta = e.originalEvent.wheelDelta;

    if (delta < 0) {
        $('p').text ('You scrolled down');
    } else if (delta > 0) {
        $('p').text ('You scrolled up');
    }
});

您必须将它绑定在跨越整个浏览器屏幕的元素上。

另一答案

TreeTree的答案可以简化为一个支持所有浏览器的功能。自jQuery supports one or more event parameter(s)以来,结合了mousewheel和DOMMouseScroll事件。但是,我的测试显示on()在最新的Firefox中不起作用。请改用bind()。您还可以组合var delta声明以支持所有浏览器:

$('html').bind('mousewheel DOMMouseScroll', function (e) {
    var delta = (e.originalEvent.wheelDelta || -e.originalEvent.detail);

    if (delta < 0) {
        console.log('You scrolled down');
    } else if (delta > 0) {
        console.log('You scrolled up');
    }
});
另一答案

现代解决方案依赖于wheel事件(IE9 +)

$('selector').on('wheel', function(event) {
  var delta = {
    x: event.originalEvent.deltaX, 
    y: event.originalEvent.deltaY
  };

  if (delta.x != 0 || delta.y != 0) {
    //user scrolled
  }
});

以上是关于JQuery / JS:检测用户的滚动尝试,没有任何窗口溢出滚动到的主要内容,如果未能解决你的问题,请参考以下文章

jQuery无限滚动未触发

jquery检测用户交互

js 检测鼠标滚轮上下滚动

检测用户何时使用 jQuery 滚动到 div 的底部

jQuery scroll() 检测用户何时停止滚动

jQuery $.ajax 没有触发任何事情发生