背景:页面本身具备滚动条,弹窗后,还是能继续滑动底部的页面,体验不好。
解决方案一:弹窗后将底部页面设置overflow:hide
;当弹窗结束后又重新设置回overflow:auto/scroll
。
这个方案大家都比较熟悉,虽然能解决问题,但是又存在的另外一个问题。那就是但你页面浏览到底部的时候,你页面设置overflow:hidden
;页面瞬间回到了顶部。这样的体验感觉也是够奇怪的了~所以我们还是来看下面一种方案,也是比较推荐的一种。
方案二:弹窗后将整个弹窗阻止手指滑动(touchmove
)的默认。
实现代码:(假设弹窗最外层的类名为masker
)
const masker = document.querySelector('masker')
masker.addEventListener('touchmove',(e) => {
e.preventDefault()
},false)
这样底部的页面就不能滑动了,关闭弹窗后,则能正常滑动。但是这里也有一个弊端就是,有的情况你的弹窗也是需要滑动来浏览内容,也就是说你的弹窗是有滚动条的。这样的设置导致你的弹窗的滚动条也无法滚动,弹窗内容无法正常浏览。因此针对这样的问题,解决思路是这样的:
1、还是把touchmove
默认给阻止掉。
2、给masker
的touchmove
加js
手势滑动来实现滑动。
这样的方案我已经封装好了,直接npm
来安装使用就行。
npm
包的github
地址:https://github.com/supermanHTL/popup-slide
希望对你有帮助!!