Trust
Trust
  • 发布:2017-03-08 15:31
  • 更新:2019-05-30 17:08
  • 阅读:18734

【示例】mui.view插件的使用

分类:MUI

hello mui示例工程中setting.html页面,用到了mui提供的一个单页插件mui.view。
可能是该页面的内容较多,许多开发者对此插件的使用不是很明了。这里通过一个最简示例,来详细说明该插件的使用。

依赖

  • mui.js
  • mui.view.js
  • mui.css

以上文件,都可以在HBuilder中新建hellomui示例工程中获取。

html结构

主体部分

<div class="mui-view">  
    <div class="mui-navbar"></div>  
    <div class="mui-pages"></div>  
</div>  

.mui-view->.mui-navbar用于加载单页的header部分
.mui-view->.mui-mui-pages用于加载单页的content部分

单页结构

<div class="mui-page">  
    <!--header部分-->  
    <div class="mui-navbar-inner mui-bar mui-bar-nav">  
        <a href="javascript:;" class="mui-icon mui-icon-back mui-action-back"></a>  
    </div>  
    <!--内容区域-->  
    <div class="mui-page-content">内容区域</div>  
</div>  

每个单页的内容区域,都在.mui-page容器中。
header部分,必须按照.mui-page->.mui-navbar-inner的结构构建。内容区域,推荐使用.mui-page.content。

css部分

.mui-page.mui-transitioning {  
    -webkit-transition: -webkit-transform 300ms ease;  
    transition: transform 300ms ease;  
}  

.mui-page-left {  
    -webkit-transform: translate3d(0, 0, 0);  
    transform: translate3d(0, 0, 0);  
}  

.mui-ios .mui-page-left {  
    -webkit-transform: translate3d(-20%, 0, 0);  
    transform: translate3d(-20%, 0, 0);  
}  

.mui-navbar .mui-btn-nav {  
    -webkit-transition: none;  
    transition: none;  
    -webkit-transition-duration: .0s;  
    transition-duration: .0s;  
}  

.mui-navbar .mui-bar .mui-title {  
    display: inline-block;  
    width: auto;  
}  

.mui-page-shadow {  
    position: absolute;  
    right: 100%;  
    top: 0;  
    width: 16px;  
    height: 100%;  
    z-index: -1;  
    content: '';  
}  

.mui-page-shadow {  
    background: -webkit-linear-gradient(left, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 10%, rgba(0, 0, 0, .01) 50%, rgba(0, 0, 0, .2) 100%);  
    background: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 10%, rgba(0, 0, 0, .01) 50%, rgba(0, 0, 0, .2) 100%);  
}  

.mui-navbar-inner.mui-transitioning,  
.mui-navbar-inner .mui-transitioning {  
    -webkit-transition: opacity 300ms ease, -webkit-transform 300ms ease;  
    transition: opacity 300ms ease, transform 300ms ease;  
}  

.mui-page {  
    display: none;  
}  

.mui-pages .mui-page {  
    display: block;  
}  

上述css,均为实现单页切换所必须的。
与transition相关的css,用于实现单页的切换动画。可以根据实际需求,适当调整。

javascript部分

初始化插件

var viewApi = mui('.mui-view').view({  
    defaultPage: '#default_page' //默认页面的选择器  
});  

切换页面

两种方式可以实现页面切换
锚点方式

<!--锚点部分-->  
<a href="#pageid"></a>  
<!--单页部分-->  
<div class="mui-page" id="pageid"></div>  

js控制
如果希望通过js来控制,可以调用view组件的go()方法来实现。

var elem = document.querySelector('a');  
elem.addEventListener('tap', function(){  
    viewApi.go('#pageid');  
});  

切换事件

hello mui中setting.html中对此已经做了明确的说明。
监听页面切换事件方案,通过view元素监听所有页面切换事件
目前提供pageBeforeShow|pageShow|pageBeforeBack|pageBack四种事件(before事件为动画开始前触发)
第一个参数为事件名称,第二个参数为事件回调,其中e.detail.page为当前页面的html对象

后退操作

单页面的切换,后退的处理非常关键。view组件提供了两个方法,来处理back。

  1. viewApi.canBack() 用于判定是否可以后退
  2. viewApi.back() 后退至上一次访问的页面
    通常,会按照setting.html中那样,重写原来的back。
    var oldBack = mui.back;  
    mui.back = function() {  
    if(viewApi.canBack()) {  
        viewApi.back();  
    } else {  
        oldBack();  
    }  
    };  

结尾

附上一个简单的demo,解压后直接在浏览器中即可预览效果。

9 关注 分享
a***@163.com kika 1***@qq.com t***@qq.com 5***@qq.com 知行合一 n***@163.com m***@vip.qq.com s7team丶杰克

要回复文章请先登录注册

1***@qq.com

1***@qq.com

楼主你好,我想问下 使用了mui.view插件后。mui的下拉刷新失效这个是什么问题能给讲解一下吗
2019-05-30 17:08
L_Me

L_Me

回复 8***@qq.com :
请问有解决么
2018-08-28 10:09
湖东呀

湖东呀

mark 话说社区什么时候出个收藏夹功能
2018-08-16 11:28
Yizhiyu

Yizhiyu

mark
2018-05-30 10:45
七月羽歌

七月羽歌

如果页面的高度大于屏幕的高度,也会出现bug。还有,在这种情形下,如果下拉了,翻过去的页面也跟着下拉了,体验不好。
2018-05-22 14:19
一枚小前端

一枚小前端

回复 2***@qq.com :
我也遇见这个问题了,你的问题解决了吗?
2018-03-30 10:16
8***@qq.com

8***@qq.com

请问在多个viewApi.go之后如何直接回到首页
2018-02-27 16:14
m先生

m先生

请问 我如果前进了多步,要怎么一次回退到首页
2018-02-08 22:48
大师兄2013

大师兄2013

在谷歌浏览器就这样,你放手机上还得了,真的弱爆了。
2017-09-26 16:00
妙妙

妙妙

这里面的title能不能直接替换原生的title呢,不然会显示两个title在界面上
2017-07-15 14:58