vue 遮罩层阻止默认滚动事件操作
在写移动端页面的时候,弹出遮罩层后,我们仍然可以滚动页面。 vue中提供 @touchmove.prevent 方法可以完美解决这个问题 <div class=”dialog”></div> 如果不是使用Vue的话,可以给body添加overflow:hidden属性解决 补充知识:vue项目中禁止页面滚动 / 滚动事件穿透 (弹出蒙版时,弹出层下面还可以滚动) vue项目中弹出层时,蒙版下还可以滚动页面。 移动端解决方案 在蒙层所在div上加 @touchmove.prevent <div class=”maskBox” @touchmove.p 在构建移动端页面时,我们经常会遇到这样一个问题:当弹出遮罩层或对话框时,用户仍然能够滚动页面,这可能会导致用户体验下降。Vue.js 提供了一种优雅的方式来解决这个问题,即通过事件修饰符 `@touchmove.prevent` 来阻止默认的滚动行为。 在 Vue 中,我们可以将 `@touchmove.prevent` 事件监听器添加到遮罩层的组件元素上,以防止用户在遮罩层出现时滚动页面。例如: ```html <div class="dialog" @touchmove.prevent></div> ``` 在这个例子中,`@touchmove.prevent` 会在触摸移动事件发生时调用 `event.preventDefault()`,从而阻止页面的滚动。这种方法简单且针对性强,只对遮罩层生效,不会影响到页面的其他部分。 如果您的项目不使用 Vue,或者需要在更广泛的范围内阻止页面滚动,可以通过修改 CSS 来实现。一种常见的方法是,在弹出遮罩层时,将 `body` 的 `overflow` 属性设置为 `hidden`: ```css body { overflow: hidden; } ``` 当遮罩层关闭时,再将 `overflow` 属性恢复为初始值,以重新启用页面滚动。 对于移动端,Vue 的解决方案是在蒙版层(maskBox)所在的 `div` 元素上使用 `@touchmove.prevent`,就像这样: ```html <div class="maskBox" @touchmove.prevent></div> ``` 而对于 PC 端,我们可以采用 JavaScript 方法来实现滚动的控制。当弹层显示时,调用 `stopMove()` 函数阻止页面滚动,弹层消失时调用 `Move()` 函数恢复页面滚动: ```javascript // 停止页面滚动 stopMove() { let m = function(e) { e.preventDefault(); }; document.body.style.overflow = 'hidden'; // 禁止滚动条 document.addEventListener("touchmove", m, { passive: false }); // 禁止页面滑动 } // 开启页面滚动 Move() { let m = function(e) { e.preventDefault(); }; document.body.style.overflow = ''; // 出现滚动条 document.removeEventListener("touchmove", m, { passive: true }); // 开启页面滑动 } ``` 总结一下,Vue 中防止遮罩层下页面滚动的方法主要包括使用事件修饰符 `@touchmove.prevent` 或者通过 CSS 修改 `body` 的 `overflow` 属性。对于移动端和 PC 端,我们可以根据具体需求选择合适的解决方案,以确保在弹出层或遮罩层出现时,页面滚动被正确地控制,从而提供更佳的用户体验。