项目里有个全屏的弹窗,然后弹窗下面手指滑动,页面仍然在滚动。 解决代码如下:
</template>
<script>
var preD = function(e) {
e.preventDefault();
};
export default {
props: ["active"],
watch: {
active(flag) {
if (flag) {
document.body.style.overflow = "hidden";
document.addEventListener("touchmove", preD, { passive: false }); //禁止页面滑动
} else {
document.body.style.overflow = ""; //出现滚动条
document.removeEventListener("touchmove", preD, { passive: false });
}
}
}
};
</script>
<style lang="scss" scoped>
有 80% 的滚动事件监听器是不会阻止默认行为的,也就是说大部分情况下,浏览器是白等了。所以,passive 监听器诞生了,passive 的意思是“顺从的”,表示它不会对事件的默认行为说 no,浏览器知道了一个监听器是 passive 的,它就可以在两个线程里同时执行监听器中的 JavaScript 代码和浏览器的默认行为了。
所以passive:true的意思就是告诉浏览器,不会阻止默认事件,你放心的滚动吧,不用等待了。