问题
IOS设备有默认的橡皮筋效果
,如下。但是在游戏中是不需要的,在阻止橡皮筋效果
的过程中就有了下面的过程。
案例代码如下,可以直接复制使用。
1 |
|
初始的效果如下
方案
方案1. JS禁止
1 | <script> |
现象: 在webview和浏览器中都有效。但是这个禁用,是一棍子打死的效果,不仅禁用掉了橡皮筋效果
,页面内部所有元素都都不能滑动了,不合适。
进一步优化: touchmove
时可以计算当前元素是否可以滑动,如往下滑动到最底时再往下滑,就阻止掉,否者正常滑动。
结论:由于JS需要频繁的取值计算,效率不高,而且也不能保证计算过程无bug,就放弃了这个方案。
方案2. CSS 脱离文档流
1 | /* 增加以下样式 */ |
现象:在webview和浏览器中都有效。因为脱离文档流了,首次渲染时已经计算好位置,外部页面无论如何滑动,都不影响页面内部的布局。
问题:并没有真正禁用橡皮筋效果
,它依旧在,只是外部透明了,用户看不到而已。而在橡皮筋效果
的过程中,用户感知不到,所以会有滑动失效的错觉,如下,会给用户感觉是bug,体验不太好,放弃。
方案3. CSS overscroll-behavior
该属性让你可以控制浏览器过度滚动时的表现 —— 也就是滚动到边界。具体效果参考张鑫旭的文章
1 | body, .scroll-container { |
现象:在浏览器中有效,在webview中无效。怀疑是兼容性问题,overscroll-behavior
属性在低版本浏览器中不兼容,而此游戏的webview
也获取不到版本信息,或许webview
就没有对overscroll-behavior
支持吧。放弃。
方案4. CSS overflow: hidden
1 | /* 增加以下样式 */ |
现象:在webview和浏览器中都可以,橡皮筋效果
没有了,元素的滑动效果也没受到影响。目前没有什么问题,最终也选择了这个方案。效果如下