移动端 弹出层 无法滚动 解决办法

原创
2017/11/28 12:06
阅读数 1.3K

首先CSS层面,在<html>标签上增加一个类名,例如fascroll,然后配合如下CSS和JS代码:

.fascroll,
.fascrollbody {
    overflow: hidden;
}
.fascrollbody {
    position: relative;
}

然后,当浮层出现的时候:

$('html').addClass('fascroll');

当浮层隐藏的时候:

$('html').removeClass('fascroll');

可以让一部分浏览器的窗体不能滚动,但不包括Safari等浏览器,怎么办呢?

我们可以在浮层touchmove的时候,阻止默认事件达到避免滚动的问题,例如:

$('aside').on('touchmove', function(event) {
    event.preventDefault();
});

这种处理兼容性强,效果最好,但是有一个问题,就是如果浮层自己也有滚动,那么这种处理会让浮层里面自己的滚动行为也无法触发,因此,我们的处理要更进一步,如下:

  1. 当手指touchstart的元素不是滚动容器同时不失容器的子元素的时候,阻止默认行为,;
  2. 如果手指touchstart的元素是滚动容器或者容器子元素的时候,不阻止默认行为,但不包括滚动到容器边缘的时候。
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部