2016-10-20 62 views
1

所以我发现有没有办法在滚动事件之前采取行动?

e.preventDefault() 
e.stopPropagation(); 
return false; 

做什么,如果触发事件是一个滚动,

不过,反正是有“打”的点火顺序滚动事件?

body{ 
    width: 100%; 
    height: 2000px; 
} 

$(document).on('scroll', function(e){ 
    $('body').css('overflow','hidden'); 
    setTimeout(function(){ 
     $('body').css('overflow','auto') 
    },100) 
}); 

上面的代码无法正常工作,溢出事件之前引发火灾,但文档滚动隐藏每一次。但是如果在事件传播之前可以隐藏溢出,那么这将起作用。

这可能吗?

我对防止滚动不感兴趣,实际上我在滚动事件中有元素移动位置。事情并不像Firefox那样引人注目,但是在Chrome(尤其是IE)中,移动显然是在滚动后发生的。

回答

1

您需要处理以下事件:

  • 轮(当你使用鼠标滚轮)
  • 鼠标按下(当您单击该文档的滚动条上滚动)
  • 的keydown(CTRL + HOME,CTRL + HEND,向下向上的箭头,PgDown键以及PGUP:键盘滚动)

如果您需要停止scrolli完全可以添加preventDefault。

这些在滚动事件之前被触发。

的片段:

$(document).on('wheel mousedown keydown', function(e){ 
 
    if (e.type == 'wheel' || e.target.tagName == 'HTML' || 
 
     (e.type == 'keydown' && ((e.ctrlKey && (e.keyCode == 36 || e.which == 35)) || 
 
           (!e.ctrlKey && (e.keyCode == 33 || e.which == 34 || e.which == 38|| e.which == 40)))) 
 
    ) { 
 
    console.log(e.type + ' event'); 
 

 
    //you may want to prevent the scroll: add next line + return; 
 
    // 
 
    //e.preventDefault(); 
 
    $('body').css('overflow','hidden'); 
 
    setTimeout(function(){ 
 
     $('body').css('overflow','auto') 
 
    },100) 
 
    } 
 
});
body{ 
 
    width: 100%; 
 
    height: 2000px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

0

我不确定我完全理解你的问题。您想在用户尝试滚动时禁用滚动吗?那么默认情况下,当我们滚动鼠标滚轮浏览器似乎滚动114px无论如何。因此,无论我们做什么,它都会在鼠标滚轮事件上以这个量滚动窗口。如果你想禁止滚动,你可以强制窗口保持在一个特定的滚动位置$(window).scrollTop(myvalue)。例如:

var currpos = $(window).scrollTop(); 
$(document).on('scroll', function(e){ 
    $('body').css('overflow','hidden'); 
    $(window).scrollTop(currpos); 
    setTimeout(function(){ 
     $('body').css('overflow','auto') 
    },100) 
}); 
相关问题