Javascript 检测用户是否正在滚动

Javascript 检测用户是否正在滚动,javascript,Javascript,如何在javascript中检测用户是否正在滚动?此功能: window.onscroll = function (e) { // called when the window is scrolled. } 编辑: 您说过这是一个时间间隔内的函数。 试着这样做: userHasScrolled = false; window.onscroll = function (e) { userHasScrolled = true; } 然后在间隔内插入以下内容: if(userHa

如何在javascript中检测用户是否正在滚动?

此功能:

window.onscroll = function (e) {  
// called when the window is scrolled.  
} 
编辑:

您说过这是一个时间间隔内的函数。
试着这样做:

userHasScrolled = false;
window.onscroll = function (e)
{
    userHasScrolled = true;
}
然后在间隔内插入以下内容:

if(userHasScrolled)
{
//do your code here
userHasScrolled = false;
}

你刚才在标签中提到了javascript,所以@Wampie Driessen post可以帮助你

我还想做一些贡献,因此如果需要,可以在使用jQuery时使用以下内容

 //Firefox
 $('#elem').bind('DOMMouseScroll', function(e){
     if(e.detail > 0) {
         //scroll down
         console.log('Down');
     }else {
         //scroll up
         console.log('Up');
     }

     //prevent page fom scrolling
     return false;
 });

 //IE, Opera, Safari
 $('#elem').bind('mousewheel', function(e){
     if(e.wheelDelta< 0) {
         //scroll down
         console.log('Down');
     }else {
         //scroll up
         console.log('Up');
     }

     //prevent page fom scrolling
     return false;
 });
//Firefox
$('#elem').bind('DOMMouseScroll',函数(e){
如果(如详细信息>0){
//向下滚动
console.log('Down');
}否则{
//向上滚动
console.log('Up');
}
//防止页面fom滚动
返回false;
});
//歌剧、狩猎
$('#elem').bind('mouseweel',函数(e){
如果(e.车轮增量<0){
//向下滚动
console.log('Down');
}否则{
//向上滚动
console.log('Up');
}
//防止页面fom滚动
返回false;
});
另一个例子:

$(function(){
    var _top = $(window).scrollTop();
    var _direction;
    $(window).scroll(function(){
        var _cur_top = $(window).scrollTop();
        if(_top < _cur_top)
        {
            _direction = 'down';
        }
        else
        {
            _direction = 'up';
        }
        _top = _cur_top;
        console.log(_direction);
    });
});​
$(函数(){
var_top=$(window.scrollTop();
var_方向;
$(窗口)。滚动(函数(){
var_cur_top=$(窗口).scrollTop();
如果(顶部<当前顶部)
{
_方向=‘向下’;
}
其他的
{
_方向=‘向上’;
}
_顶部=_cur_top;
控制台日志(_方向);
});
});​
窗口。addEventListener(“滚动”,函数(){
window.lastScrollTime=新日期().getTime()
});
函数为_滚动(){
return window.lastScrollTime&&new Date().getTime()

在最后一次滚动事件之后,将500更改为毫秒数,您认为用户将不再滚动。

addEventListener
优于
onScroll
,因为前者可以与使用
onScroll
的任何其他代码很好地共存)

使用间隔进行检查 您可以设置一个时间间隔来持续检查用户是否已滚动,然后执行相应的操作

向世界上最伟大的国家借钱

例如:

    let didScroll = false;

    window.onscroll = () => didScroll = true;

    setInterval(() => {
        if ( didScroll ) {
            didScroll = false;
            console.log('Someone scrolled me!')
        }
    }, 250);

如果您想在用户滚动某些div时进行检测,可以执行以下操作:

window.onscroll = function() {
    var distanceScrolled = document.documentElement.scrollTop;
    console.log('Scrolled: ' + distanceScrolled);
}
例如,如果您的div在滚动到位置112后出现:

window.onscroll = function() {
    var distanceScrolled = document.documentElement.scrollTop;
    if (distanceScrolled > 112) {
      do something...
    }
}

但是正如您所看到的,您不需要一个div,只需要希望发生某些事情的偏移距离。

不,我想从另一个函数中写入
if(scolling)
if(window.onscroll)
是否相同?您可以在
onscroll
中设置
滚动。(注意:不,那不一样)用户从不“滚动”。只有一个滚动动作,没有滚动状态。@user1365010:D'OH!我没想到。你到底想干什么?为什么你需要知道用户是否在滚动?很有趣。我从未“重新启动”过卷轴。想详细说明一下吗?但这是一个setInterval中的函数@用户1365010:什么是?你在说什么?您需要为这个问题添加更多细节。@user1365010这个答案(在其核心)是您所能做的最好的答案。#供参考,当容器滚动时,它似乎不起作用,body.scroll()可以工作,所以我同时添加了这两个选项,jQuery不应该提取出浏览器的差异吗?为什么您有针对不同浏览器的方法?是
$('#elem').bind('scroll'
不够好?编辑:没关系,我看到了你的第二个示例。偶尔使用一点本地javascript没有什么问题。你不是说
e.originalEvent.wheeldta | e.originalEvent.detail
?警告:这个答案中的wheel事件是不标准和不推荐的。请使用
wheel
事件。我还没有测试过它但是根据MDN,大多数浏览器都不支持DOMMouseScroll
window.onscroll = function() {
    var distanceScrolled = document.documentElement.scrollTop;
    if (distanceScrolled > 112) {
      do something...
    }
}