移动端弹窗禁止滚动小结
2018-01-05 11:48
204 查看
需求:需要我做一个移动端页面,进入页面带弹窗,点击关闭按钮弹窗消失。
分析:整体移动端页面没什么难度,只要兼容没啥问题,基本就是很easy了,但也遇到点小问题跟大家分享一下。
正常给弹窗的定位就可以width、height 100%,但我担心有些手机会崩,所以高度是直接获取的document的高度,赋值给弹窗。
问题来了:弹窗出现的时候,你滑动屏幕,弹窗总是上下滚动,体验不是很好。
解决方案:当弹窗显示的时候阻止默认行为event.preventDefault();就ok了。
移动端禁止body滚动的方法(网上查的方法,都试了一遍,很好用)
1、js原生方法:
document.addEventListener('touchmove', function(event) {
event.preventDefault();
}, false);
或者
function stopScroll(e){
document.documentElement.style.overflow='hidden';
}
2、jQuery/Zepto
$('body').on('touchmove',function(event){event.preventDefault();},false);
还有一些方法,例如给弹窗定位什么的,感觉不高级,而且定位的容易穿透,上述几个方法足够用了。
本来以为完事了,完美了,发现点击按钮关闭弹窗的时候,原来的网页的touchmove事件全被阻止了,不能滚动,下边的内容也看不见了,所以:点击弹窗关闭按钮的时候,要解除阻止。
我用的jQuery的方法,一行解决。
$('body').unbind("touchmove");
是的,你没看错,别的方法没试,我感觉这是最简单的了
我还在学习的路上,希望大家共勉!
分析:整体移动端页面没什么难度,只要兼容没啥问题,基本就是很easy了,但也遇到点小问题跟大家分享一下。
正常给弹窗的定位就可以width、height 100%,但我担心有些手机会崩,所以高度是直接获取的document的高度,赋值给弹窗。
问题来了:弹窗出现的时候,你滑动屏幕,弹窗总是上下滚动,体验不是很好。
解决方案:当弹窗显示的时候阻止默认行为event.preventDefault();就ok了。
移动端禁止body滚动的方法(网上查的方法,都试了一遍,很好用)
1、js原生方法:
document.addEventListener('touchmove', function(event) {
event.preventDefault();
}, false);
或者
function stopScroll(e){
document.documentElement.style.overflow='hidden';
}
2、jQuery/Zepto
$('body').on('touchmove',function(event){event.preventDefault();},false);
还有一些方法,例如给弹窗定位什么的,感觉不高级,而且定位的容易穿透,上述几个方法足够用了。
本来以为完事了,完美了,发现点击按钮关闭弹窗的时候,原来的网页的touchmove事件全被阻止了,不能滚动,下边的内容也看不见了,所以:点击弹窗关闭按钮的时候,要解除阻止。
我用的jQuery的方法,一行解决。
$('body').unbind("touchmove");
是的,你没看错,别的方法没试,我感觉这是最简单的了
我还在学习的路上,希望大家共勉!
相关文章推荐
- 移动端h5页面弹窗出来后,禁止底层的背景页滚动
- 解决移动端出现弹窗背景禁止滚动(阻止苹果浏览器的默认行为)
- 禁止页面滚动(移动端)
- 移动端web开发之坑---蒙层出现底部滚动禁止
- 移动端弹出层后禁止背景底层 body滚动
- PC端,移动端禁止页面滚动
- 移动端浏览器和微信浏览器上禁止body的滚动条
- Javascript禁止父元素滚动条滚动, pc、移动端均有效
- 用jq让移动端和PC端遮罩层弹出后页面禁止滚动
- 移动端和PC端遮罩层弹出后,页面禁止滚动的解决方法
- 移动端页面 弹出框滚动,底部body锁定,不滚动 / 微信网页禁止回弹效果
- 移动端禁止滚动
- jquery 禁止页面滚动-移动端
- 移动端弹出层滚动时禁止body滚动
- 移动端如何禁止body的滚动
- js禁止和启用移动端页面内容滚动
- 自己动手丰衣足食,h5手机端jquery弹窗插件(事件冒泡、单例模式、遮盖部分禁止默认滚动)
- js禁止移动端浏览器滚动事件以及取消(允许)还原浏览器滚动事件
- 移动端页面禁止鼠标滑轮滚动的方法
- 弹出弹窗后,如何禁止底层的body滚动