ios嵌入h5去掉“橡皮筋”回弹

本文介绍了在iOS设备上,H5页面顶部和底部滑动时出现的'橡皮筋'回弹现象,以及如何解决这一问题。通过使用iNoBounce插件,监听touchmove事件并阻止默认行为,可以实现无回弹的平滑滚动。同时,注意-webkit-overflow-scrolling: touch可能导致z-index失效,以及padding可能导致的回弹问题,这些问题可以通过调整布局和使用margin来规避。

UI在走查页面的时候好几次提到了这个问题,在h5页面最顶部或者底部拉页面的时候,还会出现一块页面之外的空白,松开手页面回弹回去,UI表示这样看起来页面像是截断了很不友好,能否拉了之后还是背景色而不是白色。

首先想到的就是外面包一层高度为需要视窗高度的fixed div,然后让里面的内容滚动。可惜的是在ios上滑动出现问题——当scroll bar消失后,页面滑不动了。

于是搜索一下怎么去掉ios的“橡皮筋”,于是看到了插件iNoBounce,其原理就是在支持-webkit-overflow-scrolling属性的元素上监听touchmove事件,用Js实现子元素的滚动,并且当到边界的时候,event.preventDefalut()来控制不要继续滑动。

所以依旧还是在整个页面外面包一层div,将div设置为视口高度,内部的div加上:

height: 100%;

overflow-y: scroll;

 -webkit-overflow-scrolling: touch;

这样就解决了橡皮筋的问题。

不过要注意的是, -webkit-overflow-scrolling: touch;这个会让内部的一些z-index失效【仅ios上失效】,所以还得看看页面有没有哪里是有问题的。

记录一下坑:

 

这个作者貌似并没有改过来。

还有一个issue问题就是padding-top/padding-bottom依旧会触发整个页面的橡皮筋回弹:

 没办法,把padding改成margin看起来就是可以的。

这个库坑太多,复杂页面慎用

### iOS H5 页面实现橡皮筋回弹效果的方法 为了实现在iOSH5页面中的橡皮筋回弹)效果,可以通过CSS属性`overscroll-behavior`来控制滚动行为。此属性定义了当用户尝试滚动超出范围时的行为方式。 对于希望保留并优化橡皮筋效果的情况,可以考虑以下方法: #### 使用 `overscroll-behavior` 通过设置`overscroll-behavior-y: contain;`可以让溢出区域内的内容不会影响外部布局,并保持自然的弹性反馈[^4]。 ```css html, body { height: 100%; overflow: hidden; } .wrapper { overscroll-behavior-y: contain; height: 100vh; overflow-y: scroll; } ``` 这段代码创建了一个包裹器`.wrapper`用于容纳主要内容,同时设置了高度为视窗的高度(`100vh`)以及允许垂直方向上的滚动。重要的是应用了`overscroll-behavior-y: contain;`使得即使在滚动至边缘时也不会触发父级或其他元素的动作,从而维持良好的用户体验。 #### 防止穿透现象 为了避免因橡皮筋效应而产生的点击事件穿透问题,可以在HTML结构中加入一层遮罩层,该遮罩仅在检测到接近边界的情况下显示出来阻止交互操作[^1]。 ```javascript document.addEventListener('touchmove', function(event){ var top = document.documentElement.scrollTop || document.body.scrollTop; if(top === 0 && event.touches[0].pageY < 80){ // 判断是否处于顶部附近 event.preventDefault(); // 取消默认动作防止穿透 } }, { passive: false }); ``` 上述JavaScript片段监听触摸移动事件,在判断当前位于页面顶端且触控位置较低时调用`event.preventDefault()`中断默认处理逻辑,有效避免误触底层原生组件的可能性。 #### 自定义视觉样式 如果想要改变默认白色的空白区颜色,可通过调整body标签下的背景色来自定义这部分空间的颜色表现形式[^3]。 ```css body { background-color: #f7f7f7; /* 设置自定义背景色 */ } ``` 这将使整个文档拥有统一的底色,即便是在发生过滚情况下也能提供一致性的外观体验。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值