Javascript 是否有办法在滚动事件之前采取行动?

Javascript 是否有办法在滚动事件之前采取行动?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,所以我发现 e.preventDefault() e.stopPropagation(); return false; 如果触发事件是滚动,则不执行任何操作 但是,是否有任何方式可以按触发顺序“击败”滚动事件 body{ width: 100%; height: 2000px; } $(document).on('scroll', function(e){ $('body').css('overflow','hidden'); setTimeout(functio

所以我发现

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)中,移动显然发生在滚动之后。

我不确定我是否完全理解了你的问题。是否要在用户尝试滚动时禁用滚动?默认情况下,当我们只需滚动鼠标滚轮时,浏览器似乎会以114px的速度滚动。因此,无论我们做什么,它都会在mousewheel事件中按此数量滚动窗口。如果您想禁止滚动,可以使用
$(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)
});

您需要处理以下事件:

  • 滚轮(使用鼠标滚轮时)
  • 鼠标向下(单击要滚动的文档的滚动条时)
  • 向下键(ctrl+home、ctrl+hend、向下向上箭头、向下键和向上键:键盘滚动)
如果需要停止滚动,只需添加默认值即可

这些在scroll事件之前触发

片段:

$(文档).on('wheel mousedown keydown',函数(e){
如果(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');
//您可能希望阻止滚动:添加下一行+返回;
//
//e、 预防默认值();
$('body').css('overflow','hidden');
setTimeout(函数(){
$('body').css('overflow','auto'))
},100)
}
});
正文{
宽度:100%;
高度:2000px;
}