像这种有遮罩层的情况下,怎么阻止滚动穿透
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在有遮罩层的情况下阻止滚动穿透,可以通过以下JavaScript方法实现:
监听鼠标滚轮事件:首先,需要监听页面的mousewheel
(对于较新的浏览器则是wheel
)事件,这将在用户滚动鼠标滚轮时触发。
阻止默认行为:在事件处理函数中,使用event.preventDefault()
来阻止浏览器的默认滚动行为。这样,当遮罩层激活时,背后的页面内容将不会随着鼠标滚轮动作而滚动。
管理遮罩层状态:确保在遮罩层显示和隐藏时正确地开启和关闭这个滚动阻止逻辑,避免在不需要时影响页面正常滚动功能。
示例代码片段如下:
// 获取遮罩层元素
var maskLayer = document.getElementById('yourMaskLayerId');
// 为遮罩层添加显示事件监听器
maskLayer.addEventListener('mouseover', function() {
// 阻止滚动穿透
document.body.style.overflow = 'hidden'; // 或者使用 'auto' 允许遮罩层内部滚动
document.body.addEventListener('mousewheel', preventScroll, { passive: false }); // 对于现代浏览器使用 'wheel' 事件
});
// 为遮罩层添加隐藏事件监听器
maskLayer.addEventListener('mouseout', function() {
// 恢复正常滚动
document.body.style.overflow = 'auto';
document.body.removeEventListener('mousewheel', preventScroll);
});
// 阻止滚动的函数
function preventScroll(event) {
event.preventDefault();
}
这段代码中,当遮罩层被鼠标悬停(mouseover
)时,会禁用页面主体的滚动并添加一个阻止滚动的事件监听器;当鼠标离开遮罩层(mouseout
)时,恢复页面滚动并移除该监听器。这样就能有效阻止滚动穿透问题了。