嗯,大概是产品大佬们不想让人知道这是用H5做的页面,因为禁用橡皮筋效果之后看起来就像原生native一样丝滑。。。
你可能要问了,这么烂大街的问题,网上一搜一大片,还要拿来讲?
是的,我搜到很多类似下面这样的方案:
//禁用iOS触底橡皮筋效果
document.body.addEventListener('touchmove', function (e) {
e.preventDefault(); //阻止默认的处理方式(阻止下拉滑动的效果)
}, {passive: false}); //passive 参数不能省略,用来兼容ios和android
我把它应用在我的项目里,确实也生效了。
但是
我的所有依赖上下滑动的功能都不能用了。比如overflow:scroll
失效。
所以我寻思有没有别的办法,毕竟我一前端渣渣还没办法手写一个scroll事件。
果然,被我找到了。
最佳实践
使用 position: fixed
的方式。
body {
height: 100vh;
overflow: hidden;
position: fixed;
left: 0;
top: 0;
}
(注:“body”只是示例,你可以修改成你需要禁用的页面的根布局样式)
按照上面这样写样式,也完全能够实现禁用橡皮筋效果。
原理应该是fixed布局是以浏览器为根节点,不依赖任何布局,即使是系统属性也无法生效。
希望你遇到类似问题时,能找到我这篇文章。
祝你成功!
如果能解决这个问题,请一定联系我,非常感谢您!
我的邮箱是:529046121@qq.com
用这种办法在iphonex及以上手机上,safari-》添加到主屏幕-》点主屏幕图标打开-》下方会出现一块安全区的留白。
如果还有问题,可以加微信一起探讨(Maolijun525),备注来源与原因。
我用iPhone13手机,按照你的步骤没有复现。从普通页面向上滑动把safari底部输入框收起的状态,再跳转到一个设置了fiexd的页面会出现底部输入框的区域是空白,解决这个问题可以把前置页面都设置成fiexd。如果你的步骤是毕现,查看一下是否哪里设置了iOS适配的底部间距。