在移动端开发的时候经常会碰到区域滚动的需求, 当然实现起来也是非常简单的, 给需要滚动的元素定高然后添加一个 overflow-y:scorll 自然就可以滚动了, 但是添加这个属性之后, 使用 Chrome 或者其他浏览器工具调试时是支正常的, 但是到手机上时滚动效果就十分的奇怪, 滚动会让人感觉有卡顿感. 这个时候使用一个属性就可以解决这个问题.-webkit-overflow-scrolling:touch, 这个属性会让滚动条产生回弹效果, 让滚动没有那么生硬.
在 MDN 上是这么定义这个属性的:
-webkit-overflow-scrolling 属性控制元素在移动设备上是否使用滚动回弹效果. auto: 使用普通滚动, 当手指从触摸屏上移开, 滚动会立即停止. touch: 使用具有回弹效果的滚动, 当手指从触摸屏上移开, 内容会继续保持一段时间的滚动效果. 继续滚动的速度和持续的时间和滚动手势的强烈程度成正比. 同时也会创建一个新的堆栈上下文.
然而是不是设置了这个属性之后就万事大吉了呢? 也不全是这样子的, 其实这个属性也还是有一些坑的.
偶尔会卡住或不能滑动
比较常见的问题有:
在 Safari 上, 使用了 - webkit-overflow-scrolling:touch 之后, 页面偶尔会卡住不动.
在 Safari 上, 点击其他区域, 再在滚动区域滑动, 滚动条无法滚动的 bug.
通过动态添加内容撑开容器, 结果根本不能滑动的 bug.
在网上也能看到别人也遇到过同样的问题.
偶尔卡住的问题, 解决方案网上众说纷纭, 遇到了很多相同的说法, 比如如果卡住不动的话, 就加一个 z-index, 就能解决该问题的说法.
在试了很多次之后, 这种说法没有一次解决过这个问题. 这个说法能够传播出来, 可能是使用者当时在使用的时候遇到了 - webkit-overflow-scrolling:touch 点透或者层级的问题. 所以该方案不具有适用性.
下面总结一下几种比较好的解决方案:
保证使用了该属性的元素上没有设置定位
如果出现偶尔卡住不动的情况, 那么在使用该属性的元素上不设置定位或者手动设置定位为 static, 这样会解决部分因为定位 (relative,fixed,absolute) 导致的页面偶尔不能滚动的 bug.
但是滑动到顶部继续手指往下滑, 或者到底部继续往上滑, 还是会触发卡住的问题(其实是整个页面上下回弹), 说他算 bug, 其实就是 ios8 以上的特性, 如果滚动区域大一点, 用户不会觉得这是 bug, 如果小了, 用户会不知道发生了什么而卡住了.
如果添加动态内容页面不能滚动, 让子元素 height+1
如果在 - webkit-overflow-scrolling:touch 属性的元素上, 想通过动态添加内容来撑开容器, 触发滚动, 是有 bug 的, 页面是会卡住不动的.
方法就是在 webkit-overflow-scrolling:touch 属性的下一层子元素上, 将 height 加 1% 或 1px. 从而主动触发 scrollbar.
- main-inner {
- min-height: calc(100% + 1px)
- }
为什么会有卡住不动的这个 bug
这个 bug 产生于 ios8 以上 (不十分肯定, 但在 ios5~7 上需要手动使用 translateZ(0) 打开硬件加速)
Safari 对于 overflow-scrolling 用了原生控件来实现. 对于有 - webkit-overflow-scrolling 的网页, 会创建一个 UIScrollView, 提供子 layer 给渲染模块使用.
-webkit-overflow-scrolling:touch 的其他坑
除此之外, 这个属性还有很多 bug, 包括且不限于以下几种:
滚动中 scrollTop 属性不会变化
手势可穿过其他元素触发元素滚动
滚动时暂停其他 transition
最后
如果项目中区域滚动部分不是特别多的话直接使用 - webkit-overflow-scrolling:touch 也不会有太大的问题, 但是如果这个需求很多的话可以考虑使用 better-scroll 这个库来做移动端区域滚动.
作者简介: 李成文, 芦苇科技 Web 前端开发工程师, 擅长网站建设, 微信公众号开发, 微信小程序开发, 小游戏制作, 企业微信制作, H5 建设, 专注于前端框架, 交互设计, 图像绘制, 数据分析等研究.
个人博客: LCW blog]( https://953950350.github.io/ ))
欢迎和我们一起并肩作战: mailto:Web@talkmoney.cn 访问 http://www.talkmoney.cn/ 了解更多
提供深圳微信公众号制作, 广东钉钉开发, 专业的企业微信外包, 高性价比的微信小程序建设, 靠谱的小游戏制作, 高质量的 H5 开发 在移动端开发的时候经常会碰到区域滚动的需求, 当然实现起来也是非常简单的, 给需要滚动的元素定高然后添加一个 overflow-y:scorll 自然就可以滚动了, 但是添加这个属性之后, 使用 Chrome 或者其他浏览器工具调试时是支正常的, 但是到手机上时滚动效果就十分的奇怪, 滚动会让人感觉有卡顿感. 这个时候使用一个属性就可以解决这个问题.-webkit-overflow-scrolling:touch, 这个属性会让滚动条产生回弹效果, 让滚动没有那么生硬.
在 MDN 上是这么定义这个属性的:
-webkit-overflow-scrolling 属性控制元素在移动设备上是否使用滚动回弹效果. auto: 使用普通滚动, 当手指从触摸屏上移开, 滚动会立即停止. touch: 使用具有回弹效果的滚动, 当手指从触摸屏上移开, 内容会继续保持一段时间的滚动效果. 继续滚动的速度和持续的时间和滚动手势的强烈程度成正比. 同时也会创建一个新的堆栈上下文.
然而是不是设置了这个属性之后就万事大吉了呢? 也不全是这样子的, 其实这个属性也还是有一些坑的.
偶尔会卡住或不能滑动
比较常见的问题有:
在 Safari 上, 使用了 - webkit-overflow-scrolling:touch 之后, 页面偶尔会卡住不动.
在 Safari 上, 点击其他区域, 再在滚动区域滑动, 滚动条无法滚动的 bug.
通过动态添加内容撑开容器, 结果根本不能滑动的 bug.
在网上也能看到别人也遇到过同样的问题.
偶尔卡住的问题, 解决方案网上众说纷纭, 遇到了很多相同的说法, 比如如果卡住不动的话, 就加一个 z-index, 就能解决该问题的说法.
在试了很多次之后, 这种说法没有一次解决过这个问题. 这个说法能够传播出来, 可能是使用者当时在使用的时候遇到了 - webkit-overflow-scrolling:touch 点透或者层级的问题. 所以该方案不具有适用性.
下面总结一下几种比较好的解决方案:
保证使用了该属性的元素上没有设置定位
如果出现偶尔卡住不动的情况, 那么在使用该属性的元素上不设置定位或者手动设置定位为 static, 这样会解决部分因为定位 (relative,fixed,absolute) 导致的页面偶尔不能滚动的 bug.
但是滑动到顶部继续手指往下滑, 或者到底部继续往上滑, 还是会触发卡住的问题(其实是整个页面上下回弹), 说他算 bug, 其实就是 ios8 以上的特性, 如果滚动区域大一点, 用户不会觉得这是 bug, 如果小了, 用户会不知道发生了什么而卡住了.
如果添加动态内容页面不能滚动, 让子元素 height+1
如果在 - webkit-overflow-scrolling:touch 属性的元素上, 想通过动态添加内容来撑开容器, 触发滚动, 是有 bug 的, 页面是会卡住不动的.
方法就是在 webkit-overflow-scrolling:touch 属性的下一层子元素上, 将 height 加 1% 或 1px. 从而主动触发 scrollbar.
- main-inner {
- min-height: calc(100% + 1px)
- }
为什么会有卡住不动的这个 bug
这个 bug 产生于 ios8 以上 (不十分肯定, 但在 ios5~7 上需要手动使用 translateZ(0) 打开硬件加速)
Safari 对于 overflow-scrolling 用了原生控件来实现. 对于有 - webkit-overflow-scrolling 的网页, 会创建一个 UIScrollView, 提供子 layer 给渲染模块使用.
-webkit-overflow-scrolling:touch 的其他坑
除此之外, 这个属性还有很多 bug, 包括且不限于以下几种:
滚动中 scrollTop 属性不会变化
手势可穿过其他元素触发元素滚动
滚动时暂停其他 transition
最后
如果项目中区域滚动部分不是特别多的话直接使用 - webkit-overflow-scrolling:touch 也不会有太大的问题, 但是如果这个需求很多的话可以考虑使用 better-scroll 这个库来做移动端区域滚动.
作者简介: 李成文, 芦苇科技 Web 前端开发工程师, 擅长网站建设, 微信公众号开发, 微信小程序开发, 小游戏制作, 企业微信制作, H5 建设, 专注于前端框架, 交互设计, 图像绘制, 数据分析等研究.
个人博客: LCW blog
欢迎和我们一起并肩作战: mailto:Web@talkmoney.cn 访问 http://www.talkmoney.cn/ 了解更多
提供深圳微信公众号制作, 广东钉钉开发, 专业的企业微信外包, 高性价比的微信小程序建设, 靠谱的小游戏制作, 高质量的 H5 开发
来源: https://juejin.im/post/5c2cb488f265da61542dbc6b