MUI-创建子页面

本文介绍如何使用MUI框架解决HTML5应用在移动端的滚动不流畅问题,通过将页面分解为主页面和内容页面,并利用原生滚动提高用户体验。

用html5进行手机APP编写,选择的框挺纠结,问题也多. 浏览器天生的切页白屏、不忍直视的转页动画、浮动元素的抖动、无法流畅下拉刷新等问题,这些都让HTML5开发者倍感挫败,尤其拿到Android低端机运行,摔手机的心都有; 另一方面,浏览器默认控件样式又少又丑,制作一个漂亮的控件非常麻烦,也有一些制作简单的ui框架但性能低下。MUI框架是目前使用到最接近原生APP效果的框架。

在mobile app开发过程中,经常遇到卡头卡尾的页面,此时若使用局部滚动,在android手机上会出现滚动不流畅的问题; mui的解决思路是:将需要滚动的区域通过单独的webview实现,完全使用原生滚动。具体做法则是:将目标页面分解为主页面和内容页面,主页面显示卡头卡尾区域,比如顶部导航、底部选项卡等;内容页面显示具体需要滚动的内容,然后在主页面中调用mui.init方法初始化内容页面。


mui.init({
    subpages:[{
      url:your-subpage-url,//子页面HTML地址,支持本地地址和网络地址
      id:your-subpage-id,//子页面标志
      styles:{
        top:subpage-top-position,//子页面顶部位置
        bottom:subpage-bottom-position,//子页面底部位置
        width:subpage-width,//子页面宽度,默认为100%
        height:subpage-height,//子页面高度,默认为100%
        ......
      },
      extras:{}//额外扩展参数
    }]
  });
mui框架的下的首页其实就是index.html加list.html合并而成的


index.html的作用就是显示固定导航,list.html显示具体列表内容,列表项的滚动是在list.html所在webview中使用原生滚动,既保证了滚动条不会穿透顶部导航,符合app的体验,也保证了列表流畅滚动,解决了区域滚动卡顿的问题。 list.html就是index.html的子页面,创建代码比较简单,如下:

mui.init({
    subpages:[{
      url:'list.html',
      id:'list.html',
      styles:{
        top:'45px',//mui标题栏默认高度为45px;
        bottom:'0px'//默认为0px,可不定义;
      }
    }]
  });


<think>我们正在讨论MUI框架中创建页面的方法。根据引用[1][3][4],MUI提供了多种创建页面的方式,主要使用`mui.init()`中的`subpages`参数或`mui.preload()`方法。 ### 一、通过`mui.init()`创建页面 这是最常用的方法,在初始化MUI时通过`subpages`数组配置页面。每个页面是一个对象,包含以下属性: - `url`: 页面地址(本地HTML文件或远程URL) - `id`: 页面唯一标识(通常用URL作为id) - `styles`: 页面样式(如位置、尺寸) - `extras`: 自定义扩展参数(可选) - `show`: 是否自动显示(可设置`autoShow: false`延迟显示) **示例代码**(综合引用[1][3][4]): ```javascript mui.init({ subpages: [{ url: 'list.html', // 页面路径 id: 'list.html', // 页面ID(必填) styles: { top: '45px', // 距顶部距离(预留标题栏空间) bottom: '0px', // 距底部距离 }, extras: {} // 额外参数 }, { url: 'https://www.baidu.com', // 支持外部网页 id: 'baidu', styles: { top: '0px', bottom: '50px' } }] }); ``` ### 二、通过`mui.preload()`动态预加载 适用于需要**提前加载但延迟显示**的场景(引用[2]): ```javascript // 预加载页面(不立即显示) var page = mui.preload({ url: 'new-page.html', id: 'new-page-id', styles: { top: '100px', height: '300px' }, extras: { key: 'value' // 自定义参数 } }); // 稍后手动显示 page.show('slide-in-right', 150); ``` ### 三、关键配置解析 1. **样式参数**(`styles`): - `top`/`bottom`:定义页面在父页面中的位置 - `width`/`height`:默认100%宽度,可自定义 - `zindex`:层级控制(解决覆盖问题) 2. **显示控制**: - 若需延迟显示,设置`show: { autoShow: false }`(引用[4]) - 在`plusReady`事件中手动显示(引用[1]): ```javascript mui.plusReady(function() { var ws = plus.webview.currentWebview(); ws.show('slide-in-right', 50); // 动画效果 }); ``` ### 四、最佳实践与注意事项 1. **页面堆叠顺序**: -创建页面会覆盖在先创建页面上(引用[4]) - 通过`zindex`调整层级关系 2. **外部网页加载优化**: - 显示加载等待框,加载完成后关闭(引用[1]): ```javascript plus.nativeUI.showWaiting(); // 显示等待框 // 在plusReady中关闭 plus.nativeUI.closeWaiting(); ``` 3. **性能建议**: - 非立即使用的页面用`preload`预加载 - 及时关闭不再需要的页面(`page.close()`) ### 五、常见问题解决方案 | 问题 | 解决方案 | |---------------------|--------------------------------------------------------------------------| | **页面不显示** | 1. 检查`styles`中的`top/bottom`值是否冲突<br>2. 确认是否设置了`autoShow: false`但未手动调用`show()` | | **外部网页加载失败**| 1. 确保网络权限配置正确(AndroidManifest.xml)<br>2. 使用`plus.net`检测网络状态 | | **页面覆盖错乱** | 1. 调整`zindex`属性<br>2. 使用`mui.later`延时创建页面避免重叠 | --- ### 相关问题 1. 如何在MUI页面之间传递数据? 2. `mui.preload()`和`mui.openWindow()`有什么区别? 3. 如何监听MUI页面的关闭事件? 4. 页面中如何调用父页面的函数? [^1]: MUI框架中加载外部网页或服务器数据的方法 [^2]: 手机APP ~ MUI——创建页面方法 [^3]: 使用mui框架打开页面的几种不同方式 [^4]: mui H5+实现页面创建 </think> ### MUI框架创建页面的方法详解 在MUI框架中,创建页面主要通过以下两种核心方式实现,均基于HTML5+的Webview管理机制: --- #### 一、通过 `mui.init()` 创建页面(推荐) 在页面初始化时配置 `subpages` 参数,可一次性创建多个页面。这是最常用的方法(参考引用[1][3][4]): ```javascript mui.init({ subpages: [ { url: 'list.html', // 页面路径(支持本地/远程) id: 'list.html', // 页面唯一标识(必填) styles: { // 样式控制 top: '45px', // 距顶部距离(预留标题栏) bottom: '0px', // 距底部距离(预留选项卡) zindex: 998 // 层级控制 }, extras: { // 自定义参数(可选) isCache: true }, show: { // 显示控制 autoShow: false // 是否立即显示(默认true) } }, // 可添加更多页面 ] }); ``` **关键参数说明**: | 参数 | 作用 | |----------|----------------------------------------------------------------------| | `url` | 页面地址(`.html`本地文件或`https://`远程地址)[^1] | | `id` | **必须唯一**,通常用URL作为ID | | `styles` | 定义位置尺寸:`top`/`bottom`控制位置,`zindex`解决覆盖问题[^4] | | `extras` | 自定义数据,页面通过`plus.webview.currentWebview().extras`获取 | | `show` | 设置`autoShow:false`可延迟显示,后续手动调用`show()`方法[^4] | --- #### 二、通过 `mui.preload()` 动态创建 适用于**按需加载页面**的场景(参考引用[2]): ```javascript // 预加载页面(不立即显示) var detailPage = mui.preload({ url: 'detail.html', id: 'detail_page', styles: { top: '50px', bottom: '0px' }, extras: { productId: 123 } }); // 需要时手动显示 document.getElementById('btn').addEventListener('tap', function() { detailPage.show('slide-in-right', 150); // 带动画效果 }); ``` **优势**: - 减少初始加载资源 - 灵活控制显示时机 - 支持页面间参数传递 --- ### 三、最佳实践与注意事项 1. **层级管理** 后创建页面会覆盖先创建页面,通过`styles.zindex`调整层级[^4] 2. **外部网页加载** 加载远程页面时需处理网络状态(参考引用[1]): ```javascript mui.plusReady(function() { plus.nativeUI.showWaiting("加载中"); var ws = plus.webview.currentWebview(); ws.addEventListener('loaded', function() { plus.nativeUI.closeWaiting(); }); }); ``` 3. **性能优化** - 频繁使用的页面用`preload`预加载 - 不使用的页面及时关闭:`plus.webview.close(webviewId)` 4. **常见问题解决** - **页面不显示**:检查`top/bottom`值是否冲突 - **白屏问题**:确认页面路径是否正确 - **参数获取失败**:页面需在`plusReady`后取`extras` --- ### 相关问题 1. 如何在MUI页面之间传递复杂数据? 2. 页面如何调用父页面的JS函数? 3. 如何实现页面的滑动关闭效果? 4. MUI页面与原生Tab栏如何联动? : MUI框架中加载外部网页或服务器数据的方法 [^2]: 手机APP ~ MUI——创建页面方法 [^3]: 使用mui框架打开页面的几种不同方式 : mui H5+实现页面创建
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值