概述
为实现下拉刷新功能,大多数 H5 框架都是通过 DIV 模拟下拉回弹动画,在低端 android 手机上,DIV 动画经常出现卡顿现象(特别是图文列表的情况); mui 通过使用原生 webview 下拉刷新解决这个 DIV 动画的卡顿问题,并且拖动效果更加流畅
这里提供两种模式的下拉刷新,以适用不同场景:
单 webview 模式
下拉刷新时,触发的是原生下拉刷新控件,而整个webview位置不会发生变化,所以不会在拖动过程中发生DOM重绘,当控件拖动到一定位置触发动态加载数据以及刷新操作。此模式下拉刷新,相比双webview 模式,不创建额外 webview,性能更优。
使用方法:
mui 初始化时设置pullRefresh各项参数,与双 webview 模式的子页面设置是一样的。
说明:
DOM结构无特殊要求,只需要指定一个下拉刷新容器标识即可
mui.init({ pullRefresh: { container: "#refreshContainer", //下拉刷新容器标识,querySelector能定位的css选择器均可,比如:id、.class等 down: { style: 'circle', //必选,下拉刷新样式,目前支持原生5+ ‘circle’ 样式 color: '#2BD009', //可选,默认“#2BD009” 下拉刷新控件颜色 height: '50px', //可选,默认50px.下拉刷新控件的高度, range: '100px', //可选 默认100px,控件可下拉拖拽的范围 offset: '0px', //可选 默认0px,下拉刷新控件的起始位置 auto: true, //可选,默认false.首次加载自动上拉刷新一次 callback: pullfresh - function //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据; } } });
模式说明:
优点:
- 性能更优,体现在两点:
- 相比双webview,不创建额外子 webview 性能消耗更少
- 下拉拖动过程中不会发生重绘,也减少了性能消耗
缺点:
目前仅支持‘cricle’样式以及该样式的颜色自定义
双 webview 模式
动画原理:
使用双 webview 模式的下拉刷新,创建一个子 webview 添加列表;拖动时,拖动的是一个完整的 webview,避免了类似 DIV 拖动流畅度不好的问题,回弹动画使用原生动画;在 iOS 平台,H5 的动画已经比较流畅,故依然使用 H5 方案。两个平台实现虽有差异,但 mui 经过封装,可使用一套代码实现下拉刷新。
使用方法:
主页面内容比较简单,只需要创建子页面即可:
mui.init({ subpages: [{ url: pullrefresh - subpage - url, //下拉刷新内容页面地址 id: pullrefresh - subpage - id, //内容页面标志 styles: { top: subpage - top - position, //内容页面顶部位置,需根据实际页面布局计算,若使用标准mui导航,顶部默认为48px; ..... //其它参数定义 } }] });
iOS平台的下拉刷新,使用的是 mui 封装的区域滚动组件, 为保证两个平台的 DOM 结构一致,内容页面需统一按照如下 DOM 结构构建:
<!--下拉刷新容器--> <div id="refreshContainer" class="mui-content mui-scroll-wrapper"> <div class="mui-scroll"> <!--数据列表--> <ul class="mui-table-view mui-table-view-chevron"> </ul> </div> </div>
其次,通过 mui.init 方法中 pullRefresh 参数配置下拉刷新各项参数,如下:
mui.init({ pullRefresh: { container: "#refreshContainer", //下拉刷新容器标识,querySelector能定位的css选择器均可,比如:id、.class等 down: { height: 50, //可选,默认50.触发下拉刷新拖动距离, auto: true, //可选,默认false.首次加载自动下拉刷新一次 contentdown: "下拉可以刷新", //可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容 contentover: "释放立即刷新", //可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容 contentrefresh: "正在刷新...", //可选,正在刷新状态时,下拉刷新控件上显示的标题内容 callback: pullfresh - function //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据; } } });
模式说明:
优点:
可自定义下拉刷新样式,更改文字等等.参考关于自定义下拉刷新样式问答
缺点:
相比单 webview,性能消耗更大,不过都比 div 模式的要好用
DOM结构需要统一配置
滚动到特定位置
下拉刷新组件滚动到特定位置的方法类似区域滚动组件