文档章节

移动端开发——关于局部区域滚动总结---实战系列

广州芦苇科技web前端
 广州芦苇科技web前端
发布于 01/14 19:48
字数 1320
阅读 3
收藏 1

在移动端开发的时候经常会碰到区域滚动的需求,当然实现起来也是非常简单的,给需要滚动的元素定高然后添加一个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

欢迎和我们一起并肩作战: web@talkmoney.cn 访问 www.talkmoney.cn 了解更多

提供广东钉钉开发,专业的企业微信外包,高性价比的微信小程序建设,靠谱的小游戏制作,高质量的H5开发

© 著作权归作者所有

共有 人打赏支持
广州芦苇科技web前端
粉丝 0
博文 13
码字总数 11484
作品 0
广州
私信 提问
移动端开发——关于局部区域滚动总结 | 实战系列

在移动端开发的时候经常会碰到区域滚动的需求,当然实现起来也是非常简单的,给需要滚动的元素定高然后添加一个自然就可以滚动了,但是添加这个属性之后,使用chrome或者其他浏览器工具调试时...

广州芦苇科技web前端
01/02
0
0
移动端布局与适配

grid实战之微信钱包 腾讯服务界面 CSS3网格布局是让开发人员设计一个网格并将内容放在这些网格内。而不是使用浮动制作一个网格,实际上是你将一个元素声明为一个网格容器,并把元素内容置于网...

掘金官方
2017/12/26
0
0
微信应用号开发必备技能都在这里了啦!

“微信应用号”就像平地里炸响的一声春雷,在互联网圈内炸开了锅,小代码小程序即将成为主流,H5迎来了自己的第二春。废话少说,关于微信应用号开发技能,你都掌握了吗? 没掌握的看这里,干...

咖啡
2016/09/23
0
0
移动端重构实战系列5——form元素

移动端重构实战系列5——form元素 W3CPlus2016-07-1141 阅读 重构移动元素form form 大概要实现的效果如下图(具体demo可见 sheral form ): 粗略一看,跟line list差不多,好像可以直接套用...

W3CPlus
2016/07/11
0
0
移动开发之微信小程序——资料集合

本文转载自:知乎 有需要下载的客官可可以点击知乎去下载相关资料 一:官方地址集合: 1:官方工具:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1476434678461 2:...

DJY1992
2016/12/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

eggjs与sequelize简单demo

参考 egg 官方文档 安装 // 依赖npm install --save egg-sequelize mysql2// ts 类型npm install --save @types/sequelize 插件,config/plugin.ts import { EggPlugin } from 'egg';......

Geeyu
43分钟前
1
0
看过上百部片子的这个人教你视频标签算法解析

本文由云+社区发表 随着内容时代的来临,多媒体信息,特别是视频信息的分析和理解需求,如图像分类、图像打标签、视频处理等等,变得越发迫切。目前图像分类已经发展了多年,在一定条件下已经...

腾讯云加社区
58分钟前
2
0
2. 红黑树

定义:红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树(Binary Search Tree)。 要理解红黑树,先要了解什么是二叉查找树。在上一章中,我们学习了什么是二叉树,以及二叉树...

火拳-艾斯
59分钟前
3
0
input的button类型,点击页面跳转

一、input type=button 不做任何操作 例如: <input type="button" class="btn btn-primary" style="width: 30%" value="返回" onclick="window.location.href='/users/list'"></input> onc......

Sunki
今天
1
0
踩坑:js 小数运算出现精度问题

背景 在学习小程序商城源码时发现了这个问题,单价可能出现小数,小数之间运算结果会莫名其妙多出一大串数字,比如下面这样👇。 在此之前我是知道 js 中著名的 0.1 + 0.2 != 0.3 的问题的,...

dkvirus
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部