弹出层完美禁止页面滚动

页面中经常会遇到弹出层的部件,当弹出层激活时覆盖整个页面,且背景部分不能滚动。实现起来有以下要点:

  • 弹出层position设置为fixed,四个定位锚点均设为0;
  • 激活弹出层时给htmlbody设置overflow: hidden;

以下是实践:

codepen

为了让彻底禁止滚动,还可以在mousewheeltouchmove事件(分别对应PC和移动端)中调用preventDefault()方法:

function forbidScroll(e) {
    e.preventDefault && e.preventDefault();
    e.returnValue = false;
    e.stopPropagation && e.stopPropagation();
    return false;
}

需要注意的是:chrome默认将touchmove事件视为passive,目的是提高用户体验,让处理一般事件时页面一样可以滚动,所以addEventListener的第三个参数需设置为:

{
    passive:false
}

以面向对象的方式实现的结果:

codenpen

使用es6再次重构:

codenpen

原文:http://codepen.io/zhaojun/pos...

原文地址:https://www.cnblogs.com/baimeishaoxia/p/12525779.html

时间: 2024-11-06 11:22:34

弹出层完美禁止页面滚动的相关文章

弹出层,阻止页面滚动--阻止事件冒泡

今天要实现一个效果:点击图片后弹出一个浮层,该浮层内容比较多,设置overflow:auto;希望浮层滚动的时候,底层的页面是不动的.在网上查了很多,都没有找到解决方案,有人在问,但是并没有人回答.所以特地跑去问了师傅,在这里分享一下,希望遇到同样问题的小白,可以有所帮助. 首先,把底层页面放在一个div中,包起来,设置它的css样式: 1 #main{ 2 position: fixed; 3 width: 100%; 4 top:0; 5 height:100%; 6 z-index:1;

modal 弹出层后禁止底层滚动

看到一篇不错的介绍由弹出层引发对滚动原理的讨论 亲自实验的时候各种坑,都知道在web上处理很简单: html, body{ overflow: hidden; } 1.这样只能解决web上的问题,移动端不管用 2.这样处理仍然会有一些页面宽度适配问题 因为我用在微信公众号开发上(移动端),所以找移动端解决方案, 大部分回答是在弹出层弹出的时候禁用掉触摸事件,弹出层消失的时候再把事件加上: // 记录原来的事件函数,以便恢复 var oldonwheel, oldonmousewheel, old

弹出层覆盖整个页面方法

弹出层透明背景加框的常用样式和结构 .alertMessageBg{ position:fixed; _position:absolute; width:100%; height:100%; left:0; top:0; background:#000; opacity:0.5; -moz-opacity:0.5; filter:alpha(opacity=50); z-index:97; display:none;}.alertMessageDivBorder{ position:fixed;

layer弹出层的iframe页面回调

$("#ChoiceBank").click(function () { var width = $("#content").css("Width"); layer.open({ type: 2, title: '开户银行选择', area: [width, '380px'], content: ['/Bank.aspx', 'no'], btn: ['确定', '取消'], yes: function (index, layero) { var

vue页面有弹层,禁止页面滚动

1 var preD = function (e) { 2 e.preventDefault() 3 } 4 export default { 5 data () { 6 return { 7 popupStatus: false 8 } 9 }, 10 watch: { // 监听data中弹层状态 11 popupStatus (val) { 12 if (val) { 13 document.body.style.overflow = 'hidden' 14 document.addEve

弹出层并锁定页面

<html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <style type="text/css"> *{margin:0;padding:0;} </style> </head> <body>

Ajax中用layer弹出层并刷新页面的方法

$.post("DeleteHandler.ashx", { "table": "Contents", "ID": vals }, function (data) { layer.alert(data, function () { window.location="Content.aspx"; parent.layer.close(index); }); });

jquery弹出层完美居中

showDiv($("#pop")); function showDiv(obj){ $(obj).show(); center(obj); $(window).scroll(function(){ center(obj); }); $(window).resize(function(){ center(obj); }); } function center(obj){ var windowWidth = document.documentElement.clientWidth; va

JS通过设置cookie来控制弹出层,首次打开页面显示弹出层

<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.jb51.net/" /> <title>JS通过设置cookie来控制弹出层,首次打开页面显示弹出层,刷新页面不再显示:关闭浏览器重新打开.清除缓存cookie显示.</title&