Javascript 使用键盘箭头禁用元素滚动

Javascript 使用键盘箭头禁用元素滚动,javascript,jquery,html,angular,Javascript,Jquery,Html,Angular,所以我试图在另一个div可见时禁用该div的滚动 我使用的下面的代码就是这样做的,但只有在使用鼠标滚轮滚动时 如果我单击滚动条并拖动它,或者如果我聚焦div并使用键盘向下按钮,滚动仍然会发生 为什么会这样?我如何解决我的问题(可能不需要在滚动条上覆盖透明元素或类似的“hacks”) 你为什么不这样做呢 var scrollEnabled=true; var=x=0; var scrollY=0; $(文档).ready(函数(){ $('div.outer')。打开('scroll',函数(事

所以我试图在另一个div可见时禁用该div的滚动

我使用的下面的代码就是这样做的,但只有在使用鼠标滚轮滚动时

如果我单击滚动条并拖动它,或者如果我聚焦div并使用键盘向下按钮,滚动仍然会发生

为什么会这样?我如何解决我的问题(可能不需要在滚动条上覆盖透明元素或类似的“hacks”)


你为什么不这样做呢

var scrollEnabled=true;
var=x=0;
var scrollY=0;
$(文档).ready(函数(){
$('div.outer')。打开('scroll',函数(事件){
如果(!scrollEnabled)此.scrollTo(scrollX,scrollY);
});
$('tglBtn')。在('click',函数(事件){
如果(scrollEnabled==true){
scrollEnabled=false;
scrollX=$('div.outer').scrollLeft();
scrollY=$('div.outer').scrollTop();
}否则{
scrollEnabled=true;
}
});
});
div.outer{
高度:500px;
宽度:500px;
背景色:红色;
溢出y:滚动;
}
内分区{
高度:200px;
宽度:500px;
}
内部分区:第n个子分区(奇数){
背景:蓝色;
}


您可以检测箭头键的键代码并停止事件。它们是键码37、38、39和40。但别忘了翻页键、翻页键、主页键和结束键。坦率地说,这听起来比它值得做的工作多得多——几乎到了一个XY问题的程度。但是,要停止拖动时的滚动,您所能做的并不多。无论如何,这也会破坏鼠标的功能。添加
overflow:hidden以所需div的样式?
溢出:隐藏
会完全隐藏滚动,这是我不想要的。我尝试过停止所有按键事件(如你在小提琴中看到的),按键滚动仍然有效。如果你不想禁用所有滚动,具体什么时候允许?不能这样做,因为div可以将它的滚动设置为(0,0)以外的值实例
shouldcoll
bool设置为false。我可以尝试在禁用滚动之前保存滚动位置,这样可以进行一些修改。正是我所想的,是的。老实说,这看起来还是有点“骇客”,但现在必须这样做。谢谢你的帮助!这样的事情总是“黑”的。。。谢谢你接受答案!
$('#element').on('scroll mousewheel keydown keypress keyup', function (event) {
    const element = $(event.currentTarget);
    const shouldScroll = false;

    if (!shouldScroll) {
        event.preventDefault();
        event.stopPropagation();
        return false;   
    }
});