Javascript 如何在允许子滚动的同时以编程方式禁用滚动?

Javascript 如何在允许子滚动的同时以编程方式禁用滚动?,javascript,jquery,Javascript,Jquery,使用jQuery/Javascript,如果某个元素存在,我将禁用主体中的滚动 尽管如此,这也会禁用页面上所有其他元素内的滚动 $("body").on('scroll touchmove mousewheel', function(e) { if($("#myElem").length > 0) { e.preventDefault(); e.stopPropagation(); return false; } }); 我

使用jQuery/Javascript,如果某个元素存在,我将禁用
主体中的滚动

尽管如此,这也会禁用页面上所有其他元素内的滚动

$("body").on('scroll touchmove mousewheel', function(e) {
    if($("#myElem").length > 0) {
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
});
我之所以不使用CSS,是因为
md background
元素由我无法修改的第三方插件控制

我怎样才能只禁用正文中的滚动,而允许在允许
滚动的
溢出
自动
的所有子元素中滚动

在下面的示例中,您可以看到主体和红色区域都是可滚动的。单击按钮并在页面前面添加
myElem
元素后,正文和红色区域都禁用了滚动。我要求身体被禁用,尽管在这种情况下红色区域仍然被启用


读取
e.target
,获取
指定事件的
target
元素,并相应地应用条件

$(“body”).on('scroll touchmove mousewheel',函数(e){
如果($(“#myElem”).length>0&&(e.target.id!=='myScroller')){
e、 预防默认值();
e、 停止传播();
返回false;
}
});
$(#myBtn”)。在(“单击”,函数()上{
如果($(“#myElem”).length>0){
$(“#myElem”).remove();
}else if($(“#myElem”).length==0){
$(“body”).prepend(“此元素由于存在而禁用所有滚动”);
}
});
正文{
高度:1000px;
背景颜色:绿色;
}
#迈勒姆{
背景色:黑色;
颜色:白色;
}
#迈斯克罗勒{
高度:300px;
溢出y:滚动;
背景色:红色;
颜色:白色;
}

单击下面的按钮切换附加到主体的图元。滚动时,它将检查该元素是否存在。如果存在,则禁止在主体上和读取区域内滚动。需要禁用车身,尽管红色区域已启用。


切换元件 Lorem ipsum dolor sit amet,是一位杰出的献身者。无需使用维韦拉直径。埃尼安·森佩尔·莫里斯·维塔·自由临时秘书处,tempus mattis turpis。不要告诉我你的秘密。欧盟大企业暂停经营。拉齐尼亚塞德turpis dolor 奥奇坐在那里,在酒后驾车。塞德·奎斯·梅特斯·图皮斯。非维尼那提群岛。庄严的矢状三体前庭。在阿利夸姆,努克-卢克图斯,多洛-埃利芬德。佩伦特式面部表情是暂时性的。莫里斯 塞德·维韦拉·利伯罗。尼丝·莫里斯,我的天,我的天,我的天。杜伊斯·塞德·泰姆·莫里斯(Duis sed tempor mauris),在名言中。奥奇精英,欧洲芸香,亚古力前。埃尼安·欧维利特·波苏尔、马克西姆斯·里苏斯、埃格斯塔斯·莫里斯。 在直径处为空。尊贵的酒后休庭,拉奥里特·尼布·乌特,艾库利斯·艾利特。酒后驾车。奎斯克·库苏斯、维塔·马蒂斯·康塞奎特、奥奇·康塞提图尔·库苏斯、康莫多·马莱苏达·拉库斯·乌尔纳·欧努克。纳克在纳克在利奥·莫尔斯蒂 阿利夸姆。鲁特鲁姆索利西图因酒店。pulvinar ullamcorper的Nam molestie。塞德·布兰迪特前庭门。Curabitur semper eu ipsum eu commodo。努克·福西布斯·奥奇奎斯·奥纳雷。莫比·奥纳雷·利奥在苏达莱斯,埃吉特·亚库利斯·埃尼·维韦拉。Nunc at 斜纹舌苔。埃涅亚调味品是一种美味佳肴。没有欧盟成员国。Donec egestas arcu lacinia mattis mollis。莫里斯·奎斯·马克西姆斯·厄洛斯。别再胡说八道了,别再胡说八道了。埃尼安·佩伦茨克·维利特·胡斯托, 一个美丽的圣殿骑士。这是一个巨大的例子。这是一个很小的直径。前庭,前庭,前庭,前庭,前庭。杜奈克·鲁特鲁姆·洛博蒂斯·特卢斯,欧盟效率最高 欧盟。这是一个很好的地方。这是一个值得纪念的节日。矢状位上的整数sollicitudin。这是一个充满活力的日子。洛雷姆·努拉(lorem nulla)悬赏画,帝国女神,拍卖人奎斯·安特(quis ante)。莫利斯整数 我坐在康茂多的椅子上。维内纳提斯·努拉·奎斯·阿利奎特·波尔塔。佩伦特式居住者morbi tristique Sentecus et netus et malesuada以turpis egestas闻名。乌伊斯莫德和矢状体的位置相同。我们称之为斜颈菱形肌。塞德康茂德酒店 卡苏斯、纳拉维勒的尊严、同侧胎记。这是一种新的方法。佩伦特式的塞德·莫里斯·弗林尼利亚·努拉是一位欧盟狮子。生活在奥古斯特奥古斯特,但生活在这里。直肌 乌尔纳、拉齐尼亚、欧盟、前莫里斯·康莫多·内克、法雷特拉的sollicitudin。埃尼亚克里苏斯舌苔。Nunc congue ultrices酒店。埃尼安·埃尼姆·波特托、亨德雷特·莫里斯·阿特、奥特里斯·奎姆。毛里斯·尤伊斯莫·康莫多·普鲁斯,埃格斯塔斯 他是一位智者。在前庭中,人眼座在矢状叶上,智者座在中间叶上。努克·奎斯·洛博蒂斯·维利特。普拉森特·维韦拉·厄洛斯(Praesent viverra eros)在努拉·普尔维纳尔·阿库姆桑(nulla pulvinar accumsan)。中间明渠 发酵前的乌尔那酒。塞德在尼布码头。最大直径阶段,发酵期阶段,前庭阶段,最高级阶段。佩伦特式的仪表是我和瓦努特式的封建主义者。悬钩子 elit ullamcorper的egestas mauris,非aliquet elit发酵液。
最简单的方法是,每当检测到父级的滚动事件时,将其设置为零

请参见下面的工作示例

$(函数(){
//填充显示数据
var str=“”;
对于(变量i=0;i<50;i++){
str+=i+“\n”;
}
$(“.green-pre”).text(str);
console.log(“启动”);
//修复了在父对象上滚动的问题
$(“.parent”)。打开(“滚动触摸移动鼠标滚轮”,功能(e){
log('moved'+$(this.attr('class'));
$(此).scrollTop(0);
})。单击(函数(){
警报(“点击”);
});
});