html5 遮罩层禁止滚动,移动端下弹框禁止背景滑动

移动端下弹框禁止背景滑动

茴字写法有很多种,找到最适合的才是好的。

以下下方法在一屛之内是可行的

body;html 设置overflow:hidden

.overflow-hidden{

height: 100%;

overflow: hidden;

}

// 弹出时

$('html, body,.page').addClass('overflow-hidden');

// 隐藏时

$('html, body,.page').removeClass('overflow-hidden');

问题

当body内容超出一屛时,弹框背景页面会自动滚动到顶部,无法回到原来弹框所在的位置

保存scrollTop,再设置scrollTo

var top = $(window).scrollTop();

// 弹出时

$("body .page").css({

"position": "fixed",

"top": -top,

"left": 0,

"right": 0,

"bottom": 0

}),

// 隐藏式

$("body .page").css({

"position": "static"

});

$("html").css({

"scroll-behavior": "unset"

});

$(window).scrollTop(top),

$("html").css({

"scroll-behavior": "smooth"

});

问题

当body内容超出一屛时,弹框背景页面会自动滚动到顶部,无法回到原来弹框所在的位置

页面发生了 top 和页面滚动;页面会有闪烁的情况

绑定touchmove事件,然后调用preventDefault()

function preventDefaultFn(event){

event.preventDefault();

}

// 弹出时 遮罩层

$('.modal-overlay').on('touchmove', preventDefaultFn);

// 隐藏时 遮罩层

$('.modal-overlay').off('touchmove', preventDefaultFn);

问题

弹框中还有滚动的内容,滚动内容也无法滚动

解决

给弹框内需滚动的元素添加标记,在判断是否执行event.preventDefault();

给main元素添加position:absolute(推荐)

.page {

/* main绝对定位,进行内部滚动 */

position: absolute;

top: 0;

bottom: 0;

right:0;

left:0;

/* 使之可以滚动 */

overflow-y: scroll;

/* 增加该属性,可以增加弹性 */

-webkit-overflow-scrolling: touch;

}

.overflow-hidden{

overflow: hidden;

}

// 弹出时

$('.page').addClass('overflow-hidden');

// 隐藏时

$('.page').removeClass('overflow-hidden');

优点

没有上述这些问题

随带解决了ios fixed 的相关bug

缺点

需要改页面结构

css代码微多

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值