微信小程序页面导航功能

摘要:
页面导航功能无论是在app和web中都是一个极其常见的功能,如首字母导航,tabs导航等等。但是由于微信小程序无法都dom节点进行操作,所以怎么才能在小程序中快速的导航到用户的想要到达的地方呢。

页面导航功能无论是在app和web中都是一个极其常见的功能,如首字母导航,tabs导航等等。但是由于微信小程序无法都dom节点进行操作,所以怎么才能在小程序中快速的导航到用户的想要到达的地方呢。

那么下面我们就以A-Z的首字母导航来讲解一下吧!

Step1

首先,当然我们需要简单写出我们的页面,右侧为我们A-Z的导航栏,中间显示主要的内容,当然我们这里也简单的显示A-Z区域块,方便我们去辨别。Js中我们需要定义一下A-Z的数组,以便于我们遍历到页面中。

Js初始数据

/**
* 页面的初始数据
*/
data: {
    // 首字母导航
    initial: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],
    // 节点信息
    node:[]
},

wxml代码

<view class="navigation-container">

    <!-- 显示内容 -->
    <view class="main-content">
        <view     wx:for="{{initial}}" wx:key="index">
            <text>{{item}}</text>
        </view>
    </view>

    <!-- 导航条 -->
    <view class="navigation-bars">
        <scroll-view scroll-y>
            <view   wx:for="{{initial}}" wx:key="index" catchtap='goToNode' data-index="{{index}}">{{item}}</view>
        </scroll-view>
    </view>

</view>

wxss代码

.main-content{
     100%;
}

.content {
    display: flex;
    justify-content: center;
    align-items: center;
     100%;
    height: 200rpx;
    border-bottom: 1rpx solid #eeeeee;
}

.navigation-bars{
    z-index: 2;
    position: fixed;
    top:0;
    right: 0;
}

.navigation-bars-initial {
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 28rpx;
}

页面效果如图

微信小程序页面导航功能第1张

Step2

接下来,我们就需要获取到节点的信息,虽然微信小程序上无法对dom节点进行操作,但是获取节点的信息还是可以通过微信的api获取的,然后保存一下我们获取到节点信息。

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        this.getNodeInfo();
    },

    /**
     * 获取节点信息
     */
    getNodeInfo:function(){
        let that = this;
        let query = wx.createSelectorQuery().in(that)
        for (let i in that.data.initial) {
            query.select('#' + that.data.initial[i]).boundingClientRect();
        }
        query.exec(function (res) {
            that.data.node = res
        })
    },

微信可以通过定义ID或者类名获取到对应的节点的信息,因此有wxml的代码中我是给了内容节点ID,以便于获取到对应的节点信息。

获取到的信息大致如图

微信小程序页面导航功能第2张

获取节点信息必须在onLoad,onReady,onShow事件执行,如果遍历的节点高度是一致的话,还可以通过计算节点高度的方式来计算我们需要的高度。但是如果节点高度不固定,当我们点击时再去获取高度时就会乱掉,因为获取节点的top值是根据当前节点到手机的顶端的top值,而并非距离父级的高度的值,因此我们需要在最最初始的页面状态下获取完所有的节点信息top值。

  注意:

1.query.exec()方法是能够一起拿到你获取的节点,然后返回到一个数组给你,因此我们上面通过遍历A-Z数组来,就能够一次性获取到所以节点信息的数组。

2.获取到的节点信息的top值是根据当前节点距离手机屏幕高度的top值,而并非当前节点距离父级的顶部的top值。

Step3

最后我们就只需要给右侧导航栏点击事件,然后通过wx.pageScrollTo的办法去到对应的高度。

由于这里节点是遍历出来的,因此我们在html中可以给到对应的index下标值来快速的判断,当然这里我们也要通过节点ID进行对应的判断。

    /**
     * 去到对应的节点
     */
    goToNode:function(e){
        let that = this;
        wx.pageScrollTo({
            scrollTop: that.data.node[e.currentTarget.dataset.index].top,
            duration: 300
        })
    },

到这里我们就可以通过点击右侧的导航栏进行对应的去到节点的高度,更加方便简洁去让用户操作。当然,我们这里并没有对滚动的效果做一个快慢的处理,如果有对应的需求,我们也可以做出不一样的滚动效果。

  注意:pageScrollTo不会超出到底部

小程序也可以实现页面导航的一些效果,能够提升用户的体验,相对应的是比web端和app端复杂那么一点点,但是也是实现了同样的效果。

以上!

免责声明:文章转载自《微信小程序页面导航功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js 利用image对象实现图片的预加载Web常见的攻击技术下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

微信小程序之实现页面缩放式侧滑效果

效果图: 实现原理:点击按钮,往需要动画的div中添加或移除拥有动画效果的class。 由于微信小程序中不能操作page这个根节点,所以,只有用一个div(view)来模仿page根节点。 1.结构 <view class='page {{isFix?"pageShow":"pageHide"}}' > <view clas...

windows10 中微信(UWP)版本不显示通知消息

前言: 前段时间笔者更换了升级了WINDOWS10系统,从应用商店安装微信后,使用期间不会推送消息通知,右下角的通知栏也无法添加微信图标。搜索百度和Google后,发现很多人都是这样,这是微信(UWP)版本所存在的缺陷。 解决办法: 更换成:微信For Windows版本即可 总结: 下边是一些微信 (UWP)所没有的用户常用功能。 ◆ 缺乏最受用户关注...

微信小程序测试指南

[本文出自天外归云的博客园] 微信小程序本地部署测试方法 下载微信开发者工具 让小程序管理员将测试人员的微信号添加开发者权限 本地设置hosts为测试环境hosts 打开微信web开发者工具并扫码登录 选择项目路径(事先在本地存放好小程序源代码,选择小程序所在路径,如果路径正确的话项目名会自动出现,无需手动填写) 返回填写appId,确定后双击即可打开小...

媒体查询的详细用法

media type(媒体类型)是css 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面。media query(媒体查询)是对media type的一种增强,是CSS 3的重要内容之一。随着移动互联网的发展,media query开始得到大家的重视。 media type 让我们先了解一下med...

小程序:web-view采坑指南

最近负责开发的【广州医保查询】小程序已经发布上线,其中使用web-view组件完成的【在线绑定社保卡】核心流程,遇到了一些坑,现总结如下: 首先,让我们一起看看什么是web-view ? 小程序api定义: web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面。个人类型与海外类型的小程序暂不支持使用。 1# 开发账号一定要是公司类型...

使用jQuery对图片进行居中设置

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> body { height...