【本节大纲】
- 路由API跳转小结
- hover样式
- navigator导航组件跳转
- 路由跳转规范
- 页面层级准备
【前言】
上节介绍了一下页面栈和路由API跳转,除了使用路由API进行页面跳转外,小程序宿主环境也提供了导航组件navigator进行页面跳转。
hover样式
对比其他小程序列表项会发现,目前为止,点击跳页时,点击栏没有背景样式,类似于css的hover事件,小程序如果想给元素添加触屏点击样式,可以给元素添加hover-class属性。
<view class="setting-btn" bindtap="toSetting" hover-class="list-item-hover">
<view>设置</view>
<view></view>
</view>
.list-item-hover{
background-color: #f8f8f8;
}
注意:虽然css的hover伪类也可以实现类似效果,但不太理想,效果粘附性太大,不建议使用。
navigator组件跳转
例如我的页面跳转到设置页面
<!--pages/one/one.wxml-->
<navigator url="./first/first">设置页面(组件跳页)</navigator>
文件关系

wxml 页面组件navigator 跳转时,可以通过设置open-type属性指明页面跳转方式,此外还有很多其他属性
navigator 导航组件属性列表
| 属性 | 类型 | 默认值 | 是否必填 | 说明 |
|---|---|---|---|---|
| target | string | self | 否 | 在哪个目标上发生跳转,默认当前小程序 |
| url | string | 无 | 否—是必填项 | 当前小程序内的跳转链接 |
| open-type | string | navigate | 否 | 跳转方式 |
| delta | number | 1 | 否 | 当 open-type 为 ‘navigateBack’ 时有效,表示回退的层数 |
| hover-class | string | navigator-hover | 否 | 指定点击时的样式类,当hover-class="none"时,没有点击态效果 |
| hover-stop-propagation | boolean | false,true一样 | 否 | 指定是否阻止本节点的祖先节点出现点击态 |
| hover-start-time | number | 50 | 否 | 按住后多久出现点击态,单位毫秒 |
| hover-stay-time | number | 600 | 否 | 手指松开后点击态保留时间,单位毫秒 |
注意:
①一般使用默认值即可
②官方文档写明,url为非必填项,但开发注意url必须填写,否则报错
③navigator-hover 默认为 {background-color: rgba(0, 0, 0, 0.1); opacity: 0.7;}, navigator 的子节点背景色应为透明色
navigator 导航组件属性—open-type取整列表
| 值 | 作用 |
|---|---|
| navigate | 对应API中 wx.navigateTo的功能 |
| redirect | 对应 API中wx.redirectTo 的功能 |
| switchTab | 对应API中 wx.switchTab 的功能 |
| reLaunch | 对应 API中wx.reLaunch 的功能 |
| navigateBack | 对应 API中wx.navigateBack 的功能 |
| exit | 退出小程序,target="miniProgram"时生效 |
navigator 导航组件属性—target属性取值
| 值 | 作用 |
|---|---|
| self | 当前小程序 |
| miniProgram | 其他小程序 |
navigator 导航组件属性实现关闭小程序
target取值miniProgram和open-type取值exit可以实现关闭小程序
<navigator open-type="exit" target="miniPro7/8 62gram">退出小程序</navigator>
navigator 导航组件属性—delta
例如聊天设置页面点击返回上两页
<navigator open-type="navigateBack" delta="2">返回上两页</navigator>
navigator 导航组件样式相关属性—hover-stop-propagation
<view class="area" hover-class="viewClass" hidden="{{status}}">
<navigator url="first/first">点击跳页到聊天</navigator>
</view>

路由跳转规范
页面深度限制:
官方规定小程序最多只能有10个页面同时存在,意思是在不关闭页面的情况,最多新开10个页面,页面深度为10。
如何正确使用页面跳转?
- 对于可逆操作,使用wx.navigateTo。比如从首页跳转到二级页面,从二级页面返回是不需要重新渲染首页
- 对于不可逆操作,使用wx.redirectTo。比如用户登录成功后,关闭登录页面,不能返回到登录界面。
- 对于一些介绍性等不常用页面,可以用wx.redirectTo或wx.navigateBack
- 对于类似九宫格、列表项,使用跳转
- 不要在首页使用wx.redirectTo,这样会导致应用无法返回首页
- 简化需求、简化流程:核心功能在两三个页面完成便是张小龙追求『小而美』的体现。
页面层级准备
页面层级:
在视图层内,小程序的每一个页面都独立运行在一个页面层级上。小程序启动时仅有一个页面层级,每次调用wx.navigateTo,都会创建一个新的页面层级;相对地,wx.navigateBack会销毁一个页面层级。
层级准备:
对于每一个新的页面层级,视图层都需要进行一些额外的准备工作。在小程序启动前,微信会提前准备好一个页面层级用于展示小程序的首页。除此以外,每当一个页面层级被用于渲染页面,微信都会提前开始准备一个新的页面层级,使得每次调用wx.navigateTo都能够尽快展示一个新的页面。
准备阶段3部曲:
- 第一阶段是启动一个WebView,在iOS和Android系统上,操作系统启动WebView都需要一小段时间。
- 第二阶段是在WebView中初始化基础库,此时还会进行一些基础库内部优化,以提升页面渲染性能。
- 第三阶段是注入小程序WXML结构和WXSS样式,使小程序能在接收到页面初始数据之后马上开始渲染页面(这一阶段无法在小程序启动前执行)。
页面层级准备过程图

注意:
对于wx.redirectTo,这个调用不会打开一个新的页面层级,而是将当前页面层级重新初始化:重新传入页面的初始数据、路径等,视图层清空当前页面层级的渲染结果,然后重新渲染页面。
本文深入探讨了小程序中的导航组件navigator的使用方法,包括hover样式、页面跳转规范及页面层级准备等内容,帮助开发者掌握高效的小程序页面跳转技巧。
7312

被折叠的 条评论
为什么被折叠?



