首先CSS层面,在<html>
标签上增加一个类名,例如fascroll
,然后配合如下CSS和JS代码:
.fascroll
, .fascroll
body { overflow: hidden; } .fascroll
body { position: relative; }
然后,当浮层出现的时候:
$('html').addClass('fascroll');
当浮层隐藏的时候:
$('html').removeClass('fascroll');
可以让一部分浏览器的窗体不能滚动,但不包括Safari等浏览器,怎么办呢?
我们可以在浮层touchmove
的时候,阻止默认事件达到避免滚动的问题,例如:
$('aside').on('touchmove', function(event) { event.preventDefault(); });
这种处理兼容性强,效果最好,但是有一个问题,就是如果浮层自己也有滚动,那么这种处理会让浮层里面自己的滚动行为也无法触发,因此,我们的处理要更进一步,如下:
- 当手指
touchstart
的元素不是滚动容器同时不失容器的子元素的时候,阻止默认行为,; - 如果手指
touchstart
的元素是滚动容器或者容器子元素的时候,不阻止默认行为,但不包括滚动到容器边缘的时候。