开发移动端页面的时候有一个很比较常见的需求,在出现弹窗时,禁止滑动弹窗后面的主体页面。如何实现呢,往下看html
js实现整个页面禁止滚动:vue
document.body.addEventListener('touchmove', function(e){ e.preventDefault(); }, { passive: false }); //passive 参数不能省略,用来兼容ios和android
passive是干嘛用的呢,设置该属性的目的主要是为了在阻止事件默认行为致使的卡顿。等待监听器的执行是耗时的,有些甚至耗时很明显,这样就会致使页面卡顿。即使监听器是个空函数,也会产生必定的卡顿,毕竟空函数的执行也会耗时。加上{ passive: false }能防止页面卡顿。android
咱们能够经过传递 passive 为 true 来明确告诉浏览器,事件处理程序不会调用 preventDefault 来阻止默认滑动行为。若是设置了passive为true,同时又阻止默认行为,阻止是不生效的ios
document.addEventListener("touchmove", function(event) { event.preventDefault() //不产生做用 }, {passive: true});
vue里面直接在html模板里处理:浏览器
<div v-show="showSelect" class="bill_class" @touchmove.prevent>
//若是在这个div中滑动,触发的事件会通过showSelect,能够阻止被该弹框盖在下面的页面滑动
</div>
.prevent是VUE里的事件修饰符,用来阻止默认事件,至关于 event.preventDefault()函数
pc端方案:spa
这种屏蔽方式只是屏蔽了滑动,对于PC端的鼠标滚轮是无效的,但屏蔽鼠标滚轮也很简单,把 touchmove 事件处理器改为 scroll 事件的处理器就行了code
<div class="overlayer" @scroll.prevent > </div>