小程序页内跳转
小程序的页面常常是有多个部分的,有时会出现需要在不同部分之间进行跳转的情况。如何实现小程序的页内跳转呢?本文将介绍两种方式。
方式一:scroll-into-view
scroll-into-view是小程序提供的一个实现页内跳转的API。我们可以在需要跳转的目标元素上绑定一个id,然后通过设置scroll-into-view的值为该id实现跳转到该元素所在的位置。
具体实现步骤如下:
在需要跳转到的目标元素上设置id属性,例如:
<view id="target"></view>
在跳转源元素上设置跳转事件,例如:
// 在wxml文件中
<view bindtap="scrollToTarget">跳转到目标元素</view>
// 在js文件中
scrollToTarget: function() {
this.setData({
scrollTop: 0,
scrollIntoView: 'target'
})
}
在跳转事件中,将scrollTop设置为0,表示跳转到顶部,然后将scrollIntoView设置为需要跳转到的目标元素的id,如'target'。
这种方式的优点是实现简单,不需要使用第三方组件,但缺点是只能实现跳转到本页面中已经存在的元素。
方式二:使用第三方组件
如果需要在页面中动态生成元素并且实现跳转,就需要使用第三方组件了。目前比较常用的组件是wemark,它是一个支持Markdown语法的渲染组件,可以将Markdown格式的文本渲染为小程序中的富文本展示。
使用wemark实现页内跳转,需要在Markdown文本中设置目标元素的id,然后在需要跳转到的源元素上绑定跳转事件,事件中调用wemark提供的scrollToAnchor方法即可。
具体实现步骤如下:
在Markdown文本中设置目标元素的id,例如:
# 标题一
正文一
## 小标题一
正文二
<view id="target"></view>
在Markdown文本中,需要跳转到的目标元素的id需要以<view>标签的形式出现,并且需要在小程序中存在对应的<view>元素。
在wemark的渲染页面中,绑定scroll事件,例如:
<wemark md="{{md}}" bind:scroll="onScroll" />
// 在js文件中
onScroll: function(event) {
this.wemarkContext.onScroll(event);
}
在渲染页面中,需要将从wemark组件获取的渲染内容保存为一个变量md,并在wemark组件的md属性中绑定该变量。同时,还需要在wemark组件上绑定scroll事件,并在事件中调用wemarkContext上的onScroll方法,实现滑动到目标元素时的跳转效果。
在需要跳转的源元素上绑定跳转事件,例如:
// 在wxml文件中
<view bindtap="scrollToTarget">跳转到目标元素</view>
// 在js文件中
scrollToTarget: function() {
this.wemarkContext.scrollToAnchor('target');
}
在跳转事件中,调用wemarkContext上的scrollToAnchor方法,将需要跳转到的目标元素的id作为参数传递进去即可。
这种方式的优点是可以动态生成元素,并且目标元素可以在Markdown文本中设置,实现灵活性比较高,但需要引入第三方组件,增加了代码量。
总结
小程序实现页内跳转有两种方式:scroll-into-view和使用第三方组件。前者实现简单,但只能跳转到本页面中已经存在的元素;后者实现稍微复杂一些,但可以实现动态生成元素和Markdown文本中设置目标元素的效果。选择哪种方式可以根据实际情况和需求来做出决定。