小程序Tab栏与页面滚动联动

小程序tab栏切换与页面滚动联动

tab栏与页面滚动联动

在进行小程序开发时,需要实现点击tab栏页面滚动到某一指定位置,并且滚动页面时,小程序的tab栏进行切换。

在一开始,第一反应是使用id,然后看到了scrollIntoView方法,但是在小程序里面没有document,获取不到某个id的div,然后看到了createSelectorQuery

于是

javascript 复制代码
      let query = uni.createSelectorQuery();
      let collapse1 = query.select("collapse1");
      collapse1.scrollIntoView();

然后就会报错n.scrollIntoView is not a function

后来又试了ref的方法,还是没有拿到node节点,于是放弃了这种办法

  • 但是我依然觉得这种方法有可实现性,只不过我不会
    当然,条条道路通罗马,好男人不会在一棵树上吊死,于是乎有了下面的方法:

点击tab栏页面跳到指定位置

寻寻觅觅,冷冷清清,看到了这个激动万分

于是乎页面的布局为

html 复制代码
    <u-sticky bgColor="#fff">
      <u-tabs
        :list="list"
        :current="current"
        @change="changeTabs"
        enhanced
        :show-scrollbar="false"
      ></u-tabs>
    </u-sticky>
        <scroll-view
      	class="scrollView"
      	scroll-y="true"
      	:scroll-into-view="scrollView"
      	:scroll-with-animation="true"
      	@scroll="scroll"
    	>
		<view id="id0">...</view>
		<view id="id1">...</view>
		<view id="id2">...</view>
	</scroll-view>

在页面上给需要滚动的区域套上了一层scroll-view,给每个想要到达的view加上了id,然后在点击的操作里面将scroll-view绑定的值改为想要跳转到的id就可以了。

javascript 复制代码
    changeTabs(index) {
      this.scrollView = `id${index}`;
      this.current = index;
    },

这样就可以实现点击tab切换时页面滚动到指定位置了。

做到这里有没有想到一个东西--锚点链接

滚动页面时切换tab栏

页面滚动刚刚好就需要用到scroll-view的scroll事件了,scroll事件默认返回的信息中有页面的一些属性。

首先在页面加载完成之后获取了每个需要跳转到的元素的高度

javascript 复制代码
  onReady() {
    var that = this;
    setTimeout(function() {
      var query = wx.createSelectorQuery();
      query.select("#id0").boundingClientRect();
      query.select("#id1").boundingClientRect();
      query.select("#id2").boundingClientRect();
      query.exec(function(res) {
        that.heightData = res;
      });
    }, 500);
  },

然后根据高度来计算页面滚动到什么位置的时候修改tab的当前值

javascript 复制代码
scroll(event) {
      let that = this;
      let e = event.detail;
      if (e.scrollTop >= 0 && e.scrollTop <= that.heightData[0].height - 45) {
        that.current = 0;
      }
      if (
        e.scrollTop >= that.heightData[1].top - 45 &&
        e.scrollTop <= that.heightData[1].top + that.heightData[1].height - 45
      ) {
        that.current = 1;
      }
      if (
        e.scrollTop >= that.heightData[2].top - 45 &&
        e.scrollTop <= that.heightData[2].top + that.heightData[2].height - 45
      ) {
        that.current = 2;
      }
  }

这样的话在滚动页面之后,判断页面的位置修改tab的值就可以了。

相关推荐
Mintopia1 分钟前
🤖 AI 决策 + 意图OS:未来软件形态的灵魂共舞
前端·人工智能·react native
攀登的牵牛花2 分钟前
前端向架构突围系列 - 框架设计(四):依赖倒置原则(DIP)
前端·架构
Van_Moonlight2 分钟前
RN for OpenHarmony 实战 TodoList 项目:已完成未完成数量显示
javascript·开源·harmonyos
幽络源小助理9 分钟前
SpringBoot+小程序高校素拓分管理系统源码 – 幽络源免费分享
spring boot·后端·小程序
程序员爱钓鱼10 分钟前
Node.js 编程实战:测试与调试 —— 日志与监控方案
前端·后端·node.js
Mapmost18 分钟前
数字孪生项目效率翻倍!AI技术实测与场景验证实录
前端
小酒星小杜22 分钟前
在AI时代,技术人应该每天都要花两小时来构建一个自身的构建系统-Input篇
前端·程序员·架构
Cache技术分享30 分钟前
290. Java Stream API - 从文本文件的行创建 Stream
前端·后端
陈_杨32 分钟前
前端成功转鸿蒙开发者真实案例,教大家如何开发鸿蒙APP--ArkTS 卡片开发完全指南
前端·harmonyos
Mr -老鬼35 分钟前
移动端跨平台适配技术框架:从发展到展望
android·ios·小程序·uni-app