扫码关注官方订阅号
业精于勤,荒于嬉;行成于思,毁于随。
这个问题确实比较难处理,我用的方式也是比较粗暴的。
监听弹层区域的容器(下面都叫它A)的touchstart事件,记录起始点位置,此时的scrollTop值,判断A是否是可滚动的(内容是不是比A高)
监听A的touchmove事件,如果A不可滚动,则直接执行event.preventDefault()
event.preventDefault()
如果A可滚动,则根据记录scrollTop和A的高度判断A的内容是否滚动到了顶部或底部
如果滚动到了顶部,则根据记录的起始点位置和现在的touch的位置判断是否是往下滚动(如果顶部还在往下拉,应禁止掉橡皮筋效果),则执行event.preventDefault()
同理如果滚动到了底部,判断到的move方向是往上,则也应该执行event.preventDefault()
否则执行event.stopPropagation()
event.stopPropagation()
你试试这样子行不行?当弹出层弹出来后,把Body的overflow设置为hidden,溢出隐藏试试,然后弹出层关闭后,再auto
然后搜了一下,这里有些方法看你能试出来不能:https://segmentfault.com/q/10...
打开弹窗的时候给页面层加上height:100%;overflow:hidden;弹窗层overflow-y:auto;关闭的时候去掉
楼上是对的。。我自己这么干过。。
针对移动端来说,打开弹窗的时候给页面层加上height:100%;overflow:hidden;弹窗层overflow-y:auto;关闭的时候去掉;时灵时不灵,得看浏览器了。但是在PC上效果还是可以的。在移动端上,我用的是:开启弹出层的时候,绑定touchmove:$("body").bind("touchmove",function(e) {
e.preventDefault();
},false);关闭弹出层的时候,移除touchmove:$("body").unbind("touchmove");
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
这个问题确实比较难处理,我用的方式也是比较粗暴的。
监听弹层区域的容器(下面都叫它A)的touchstart事件,记录起始点位置,此时的scrollTop值,判断A是否是可滚动的(内容是不是比A高)
监听A的touchmove事件,如果A不可滚动,则直接执行
event.preventDefault()如果A可滚动,则根据记录scrollTop和A的高度判断A的内容是否滚动到了顶部或底部
如果滚动到了顶部,则根据记录的起始点位置和现在的touch的位置判断是否是往下滚动(如果顶部还在往下拉,应禁止掉橡皮筋效果),则执行
event.preventDefault()同理如果滚动到了底部,判断到的move方向是往上,则也应该执行
event.preventDefault()否则执行
event.stopPropagation()你试试这样子行不行?当弹出层弹出来后,把Body的overflow设置为hidden,溢出隐藏试试,然后弹出层关闭后,再auto
然后搜了一下,这里有些方法看你能试出来不能:https://segmentfault.com/q/10...
打开弹窗的时候给页面层加上height:100%;overflow:hidden;弹窗层overflow-y:auto;关闭的时候去掉
楼上是对的。。我自己这么干过。。
针对移动端来说,打开弹窗的时候给页面层加上height:100%;overflow:hidden;弹窗层overflow-y:auto;关闭的时候去掉;时灵时不灵,得看浏览器了。但是在PC上效果还是可以的。
在移动端上,我用的是:
开启弹出层的时候,绑定touchmove:
$("body").bind("touchmove",function(e) {
},false);
关闭弹出层的时候,移除touchmove:
$("body").unbind("touchmove");