双 webview 模式

  • 效果展示:

    双 webview 模式 - 图1

  • 动画原理:

    使用双 webview 模式的下拉刷新,创建一个子 webview 添加列表;拖动时,拖动的是一个完整的 webview,避免了类似 DIV 拖动流畅度不好的问题,回弹动画使用原生动画;在 iOS 平台,H5 的动画已经比较流畅,故依然使用 H5 方案。两个平台实现虽有差异,但 mui 经过封装,可使用一套代码实现下拉刷新。

  • 使用方法:

    主页面内容比较简单,只需要创建子页面即可:

    1. mui.init({
    2. subpages:[{
    3. url:pullrefresh-subpage-url,//下拉刷新内容页面地址
    4. id:pullrefresh-subpage-id,//内容页面标志
    5. styles:{
    6. top:subpage-top-position,//内容页面顶部位置,需根据实际页面布局计算,若使用标准mui导航,顶部默认为48px;
    7. .....//其它参数定义
    8. }
    9. }]
    10. });

    iOS平台的下拉刷新,使用的是 mui 封装的区域滚动组件, 为保证两个平台的 DOM 结构一致,内容页面需统一按照如下 DOM 结构构建:

    1. <!--下拉刷新容器-->
    2. <div id="refreshContainer" class="mui-content mui-scroll-wrapper">
    3. <div class="mui-scroll">
    4. <!--数据列表-->
    5. <ul class="mui-table-view mui-table-view-chevron">
    6. </ul>
    7. </div>
    8. </div>

    其次,通过 mui.init 方法中 pullRefresh 参数配置下拉刷新各项参数,如下:

    1. mui.init({
    2. pullRefresh : {
    3. container:"#refreshContainer",//下拉刷新容器标识,querySelector能定位的css选择器均可,比如:id、.class等
    4. down : {
    5. height:50,//可选,默认50.触发下拉刷新拖动距离,
    6. auto: true,//可选,默认false.首次加载自动下拉刷新一次
    7. contentdown : "下拉可以刷新",//可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
    8. contentover : "释放立即刷新",//可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
    9. contentrefresh : "正在刷新...",//可选,正在刷新状态时,下拉刷新控件上显示的标题内容
    10. callback :pullfresh-function //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
    11. }
    12. }
    13. });
  • 模式说明:

  • 滚动到特定位置

    下拉刷新组件滚动到特定位置的方法类似区域滚动组件

    目前仅支持 双 webview 模式

    • [

      scrollTo( xpos , ypos [, duration] )

      ](#on-events-selector-data-handler)

      • xpos

        Type: Integer

        要在窗口文档显示区左上角显示的文档的 x 坐标

      • ypos

        Type: Integer

        要在窗口文档显示区左上角显示的文档的 y 坐标

      • duration

        Type: Integer

        滚动时间周期,单位是毫秒

  1. 示例:在 hello mui 下拉刷新示例中,实现了双击标题栏,让列表快速回滚到顶部的功能;代码如下:
  2. ```
  3. var contentWebview = null;
  4. //监听标题栏的双击事件
  5. document.querySelector('header').addEventListener('doubletap',function () {
  6. if(contentWebview==null){
  7. contentWebview = plus.webview.currentWebview().children()[0];
  8. }
  9. //内容区滚动到顶部
  10. contentWebview.evalJS("mui('#pullrefresh').pullRefresh().scrollTo(0,0,100)");
  11. });
  12. ```
  • 更改下拉刷新文字位置

    *;)可以解决修改下拉刷新子页面默认top值后,下拉刷新提示框位置异常问题

    根据实际需求在父页面给mui-content设置top属性

    目前仅支持 双 webview 模式

    1. .mui-bar-nav ~ .mui-content .mui-pull-top-pocket{
    2. top: 180px !important;
    3. }