mui提供了两种侧滑导航实现:webview模式和div模式,两种模式各有优劣,适用于不同的场景。
webview模式
主页面和菜单内容在不同的webview中,两个页面根据内容需求分别组织DOM结构,mui对其DOM结构无特殊要求,故其有如下优点:
菜单内容是单独的webview,故可被多个页面复用;
菜单内容在单独的webview中,菜单区域的滚动不影响主界面,故可使用原生滚动,滚动更为流畅;
另一方面,webview模式也有其缺点:
不支持拖动手势(跟手拖动);
主页面、菜单不同webview实现,因此若需交互(如:点击菜单触发主页面内容变化),需使用自定义事件实现跨webview通讯;
div模式
主页面和菜单内容在同一个webview下,嵌套在特定结构的div中,通过div的移动动画模拟菜单移动;故该模式有如下优点:
支持拖动手势(跟手拖动);
主页面、菜单在一个页面中,可通过JS轻松实现两者交互(如:点击菜单触发主页面内容变化),没有跨webview通讯的烦恼;
另一方面,div模式也有其缺点:
不支持菜单内容在多页面的复用,需每个页面都生成对应的菜单节点;
主界面和菜单内容的滚动互不影响,因此会使用div区域滚动,在低端Android手机且滚动内容较多时,可能会稍显卡顿;
div模式支持不同的动画效果,每种动画效果需遵从不同的DOM构造;下面我们以右滑菜单为例(左滑菜单仅需将菜单父节点上的mui-off-canvas-left换成mui-off-canvas-right即可),说明每种动画对应的DOM结构。
动画1:主界面移动、菜单不动
~~~
<!-- 侧滑导航根容器 -->
<div class="mui-off-canvas-wrap mui-draggable">
<!-- 菜单容器 -->
<aside class="mui-off-canvas-left">
<div class="mui-scroll-wrapper">
<div class="mui-scroll">
<!-- 菜单具体展示内容 -->
...
</div>
</div>
</aside>
<!-- 主页面容器 -->
<div class="mui-inner-wrap">
<!-- 主页面标题 -->
<header class="mui-bar mui-bar-nav">
<a class="mui-icon mui-action-menu mui-icon-bars mui-pull-left"></a>
<h1 class="mui-title">标题</h1>
</header>
<div class="mui-content mui-scroll-wrapper">
<div class="mui-scroll">
<!-- 主界面具体展示内容 -->
...
</div>
</div>
</div>
</div>
~~~
动画2:主界面不动、菜单移动
该种动画要求的DOM结构和动画1的DOM结构基本相同,唯一差别就是需在侧滑导航根容器class上增加一个mui-slide-in类
动画3:主界面、菜单同时移动
该种动画要求的DOM结构较特殊,需将菜单容器放在主页面容器之下
~~~
<!-- 侧滑导航根容器 -->
<div class="mui-off-canvas-wrap mui-draggable">
<!-- 主页面容器 -->
<div class="mui-inner-wrap">
<!-- 菜单容器 -->
<aside class="mui-off-canvas-left">
<div class="mui-scroll-wrapper">
<div class="mui-scroll">
<!-- 菜单具体展示内容 -->
...
</div>
</div>
</aside>
<!-- 主页面标题 -->
<header class="mui-bar mui-bar-nav">
<a class="mui-icon mui-action-menu mui-icon-bars mui-pull-left"></a>
<h1 class="mui-title">标题</h1>
</header>
<!-- 主页面内容容器 -->
<div class="mui-content mui-scroll-wrapper">
<div class="mui-scroll">
<!-- 主界面具体展示内容 -->
...
</div>
</div>
</div>
</div>
~~~
mui支持多种方式显示div模式的侧滑菜单:1、在主界面向右拖动(drag);2、点击含有mui-action-menu类的控件;3、Android手机按menu键;4、通过JS API触发,如下:
~~~
mui('.mui-off-canvas-wrap').offCanvas('show');
~~~
同样,mui支持多种方式关闭div模式的侧滑菜单:1、在手机屏幕上任意位置向左拖动(drag);2、点击主界面内任意位置;3、Android手机按menu键;4、Android手机按back键;5、通过JS API触发,如下:
~~~
mui('.mui-off-canvas-wrap').offCanvas('close');
~~~
- mui
- 拓展
- 本地存储
- 获取时间
- 滚动帧听
- ui组件
- accordion(折叠面板)
- actionsheet(操作表)
- badge(数字角标)
- button(按钮)
- cardview(卡片视图)
- checkbox(复选框)
- dialog(对话框)
- 图片轮播
- 输入增强
- list(列表)
- 遮罩蒙版
- media list(图文列表)
- numbox(数字输入框)
- 侧滑导航
- 弹出菜单
- picker(选择器)
- popPicker
- dtpicker
- progressbar(滚动条)
- radio(单选框)
- range(滑块)
- scroll(区域滚动)
- slide(轮播组件)
- switch(开关)
- 手机底层
- 蜂鸣提示音和手机震动
- 设备信息
- 手机信息
- 电话
- 发送短信
- 消息框
- 浏览器打开网页
- 界面
- 手势
- 轮播组件
- 底部导航
- 打开新页面
- 遮罩
- webview详解
- js基础
- 数组
- mui教程
- 教程— html5+ webview 底部栏用法详解(二)(转载)
- 自动弹出虚拟键盘
- Native.js示例汇总