微信小程序-uniapp-切换tab时数据列表如何切换?

news2025/1/11 19:46:01

如图:

这里有两个tab,要保证每次切换后列表保持不变,就必须在运行时要有两个持久化的数据源,每个tab是一个列表,让我们来设计一下这样的数据结构。

首先我们的数据结构是这样的:

体现在vue的data是这样的:

正好对应tab的索引,当tab改变时,tab会回调索引:

模版中则动态切换使用的数据源:

总结就是:tab默认索引为0,点击另一个tab时,在回调中改变当前data的subsection_current为回调的index,这样模版就能动态切换数据源了。

解决了动态切换数据源的问题,我们再讨论下如何页面滑动切换tab,我这里使用的是swiper组件。

首先我会默认初始tab个数的swiper组件到页面:

每个swiper组件内嵌了一个瀑布流组件,这个组件原是uniapp插件市场下载的,但是有一些问题,首先不能一次性加载多张图片,而是需要一张图片加载完成才能加载下一张图片,我在此基础上改进后,可以一次性加载一页的全部图片,并且扩展了一些自己的需求,基本上算重构了。

瀑布流的原理就是布局为两列或者多列,每页数据轮流放到每一列中,如第一次是第一列,那么第二次就放到第二列,依次类推。

我在swiper组件上有一个动态设置height的代码,这是因为swiper的高度需要是固定的一个值,也可以动态改变,我就会在每次分配数据到瀑布流的列之后计算一下两列的高度,返回最高一列的高度到父组件,再动态设置到swiper上。

附上瀑布流动态分配代码以及获取高度并重新分配、回调高度重新设置swiper高度的代码。

首先是初次初始化瀑布流组件时:

handleViewRender函数方法体代码如下:

关键的获取下一次需要分配数据到那列的方法以及获取最高一列高度的代码如下:

获取瀑布流中最高一列的高度:

我们再回到handleViewRender方法,每次分配数据到列都会emit一次高度信息:

我们看看父组件是如何接受和处理通知的:

处理的方法很简单,只是重新计算下每个tab的高度而已:

为啥这里还多加了一个this.swpier_bottom_height呢?

因为emit的高度可能不够,所以额外多加点高度撑起来,我这边设置的高度为:

我们再回首看看swiper的:style:

当某个tab内容发生改变时,瀑布流组件就会通知父组件,父组件再更改每个数据源中tab索引对应的height即可,这样就能实现动态设置swiper高度了。

不错,到这里这个页面已经完成了切换tab时可以动态切换数据源的问题,高度也会自动重新设置,但是。。又一个新问题出现了,因为每个tab下的页面都是需要向下滚动的,比如tab1滚动了1000px的距离,但我没有操作tab2的页面,理应tab2的页面是没有滚动的,但实际是tab2的滚动距离也是1000px,追其根由就是两个tab的滚动距离没有独立出来。

所以我们又需要将每个tab的滚动高度也独立出来,和每个tab有独立的数据源一样,滚动距离也是每个tab独有的,我是这么设计数据结构的:

再多加一个字段单独记录每个tab的滚动记录,如tab1滚动了500px,tab2滚动了1000px,我切换到tab1时,设置滚动距离为500,切换到tab2时,设置滚动距离为1000px,理论的思路如上,我们进入代码部分:
滚动我使用了z-paging组件,这个组件提供了相当丰富的扩展,基本满足上拉加载、下拉刷新的全部需求了:

处理每次滚动时的回调:

直接设置每个数据源的滚动距离,设置完以后当切换tab时再动态设置为不同当前tab索引的滚动距离即可:

z-paging也提供了相应方法可以直接滚动到相应的位置。

OK,到这里我们完成了点击或者左右滑动时都能切换tab,以及切换到不同tab时不同的数据源、每个tab下数据加载时动态设置swiper高度、瀑布流自动依次分配数据到不同列的整体完整需求。

大家可以微信搜索:《一方云知》体验一下上述的功能,因为我的后端是如果半个小时内没有访问的话自动关机的,所以大家遇到页面一只loading的话,可能等待1-2分钟即可启动了。

该功能路径:打开小程序->精选图片。

这篇分享文章就到这里啦!如果你对文章内容有疑问或想要深入讨论,欢迎在评论区留言,我会尽力回答。同时,如果你觉得这篇文章对你有帮助,不妨点个赞并分享给其他同学,让更多人受益。

想要了解更多相关知识,可以查看我以往的文章,其中有许多精彩内容。记得关注我,获取及时更新,我们可以一起学习、讨论技术,共同进步。

感谢你的阅读与支持,期待在未来的文章中与你再次相遇!

我的微信公众号:【xdub】,欢迎大家订阅,我会同步文章到公众号上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1820191.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

opencv 通过滑动条调整阈值处理、边缘检测、轮廓检测、模糊、色调调整和对比度增强参数 并实时预览效果

使用PySimpleGUI库创建了一个图形用户界面(GUI),用于实时处理来自OpenCV摄像头的图像。它允许用户应用不同的图像处理效果,如阈值处理、边缘检测、轮廓检测、模糊、色调调整和对比度增强。用户可以通过滑动条调整相关参数。 完整代码在文章最后,可以运行已经测试; 代码的…

【C++取经之路】继承

目录 继承的概念及定义 单继承的格式 继承方式和访问限定符 继承后子类访问基类成员的权限 基类和派生类对象赋值转换 切片 继承中的作用域 引申:重载和隐藏的区别 派生类的默认成员函数 继承与友元 继承与静态成员 如何实现一个不能被继承的类 复杂的…

Ubuntu 24.04 屏蔽snap包

Ubuntu 24.04 屏蔽snap包 屏蔽 这里所说的屏蔽指的是&#xff1a;禁止sudo apt install firefox时安装snap版本的包。 如需卸载snap&#xff0c;请使用关键词搜索。 命令行 cat <<EOF | sudo tee /etc/apt/preferences.d/snap-apps-disable Package: chromium* firef…

SpringBoot启动流程、起步依赖、配置文件、运行方式与核心注解

讲一讲SpringBoot启动流程 springboot项目在启动的时候, 首先会执行启动引导类里面的SpringApplication.run(AdminApplication.class, args)方法 这个run方法主要做的事情可以分为三个部分 : 第一部分进行SpringApplication的初始化模块&#xff0c;配置一些基本的环境变量、…

鲁教版八年级数学下册-笔记

文章目录 第六章 特殊平行四边形1 菱形的性质与判定2 矩形的性质与判定3 正方形的性质与判定 第七章 二次根式1 二次根式2 二次根式的性质3 二次根式的加减二次根式的乘除 第八章 一元二次方程1 一元二次方程2 用配方法解一元二次方程3 用公式法解一元二次方程4 用因式分解法解…

RERCS系统开发实战案例-Part04 创建FPM Application的搜索组件UIBB及其Feeder Class创建分配

继FPM Application创建完成后&#xff0c;新增对应的UIBB。 1、通过事务码 FPM_WB 进入FPM Application的配置界面 1&#xff09;条件搜索组件UIBB&#xff08;用于页面添加字段作为搜索条件&#xff09;&#xff1b; 2&#xff09;编辑配置标识和标题&#xff1b; 3&#xff…

TF-IDF算法教程

前言 TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff09;是一种常用的文本分析技术&#xff0c;广泛应用于信息检索和文本挖掘领域。它是一种统计方法&#xff0c;用于评估一个词语在一个文档中的重要程度。TF-IDF的核心思想是&#xff1a;如果一个词语…

CXL协议中 Register Locator DVSEC详解

✨ 前言&#xff1a; Register Locator DVSEC&#xff08;Designated Vendor-Specific Extended Capability&#xff09;是一种PCI Express&#xff08;PCIe&#xff09;配置空间的能力&#xff0c;专为CXL&#xff08;Compute Express Link&#xff09;技术中的设备设计。这包…

linux中DNS域名解析服务

DNS系统在网络中的作用就是维护一个地址数据库&#xff0c;其中记录了各种主机域名与IP地址的对应关系&#xff0c;以便为客户程序提供正向或反向的地址查询服务&#xff0c;即正向解析与反向解析。 正向解析&#xff1a;根据域名查IP地址&#xff0c;即将指定的域名解析为相对…

30 岁的程序员,要有 “归零“ 心态

大家好&#xff0c;我是码农先森。 古话说的 “三十而立”&#xff0c;正是担重之时&#xff0c;却大部分人在职场中都处于不上不下的尴尬境地。已经没有刚毕业时那股子冲劲&#xff0c;被生活和工作磨平了棱角。 在技术思想方面&#xff0c;似乎已经触及到了天花板&#xff…

Sqoop学习详细介绍!!

一、Sqoop介绍 Sqoop是一款开源的工具&#xff0c;主要用于在Hadoop(HDFS/Hive/HBase)与传统的数据库(mysql、postgresql...)间进行数据的传递&#xff0c;可以将一个关系型数据库&#xff08;例如 &#xff1a; MySQL ,Oracle ,Postgres等&#xff09;中的数据导进到Hadoop的H…

提升营业厅服务质量:DuDuTalk柜台录音设备,台席质检的新选择

在快节奏的营业厅日常运营中&#xff0c;柜台服务的质量直接影响着客户的满意度和企业的品牌形象。据最新数据显示&#xff0c;全国运营商营业厅数量近100万家&#xff0c;成为服务十几亿用户的前线窗口。然而&#xff0c;在提供日常服务的同时&#xff0c;客户投诉事件也随之而…

单目标应用:基于蛇鹫优化算法SBOA的微电网优化(MATLAB代码)

一、微电网模型介绍 微电网多目标优化调度模型简介_vmgpqv-CSDN博客 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、蛇鹫优化算法求解微电网 2.1算法简介 蛇鹫优化算法&#xff08;Secre…

[DDR5 Jedec] 读操作 Read Command 精讲

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 Read 读取命令也可以视为列读取命令。当与正确的bank地址和列地址结合使用时&#xff0c;通过激活命令&#xff08;行访问&#xff09;移动到检测放大器中的数据&#xff0c; 现在被推送到数…

开启数字化校园时代:智慧教育的引领者

在当前数字化时代&#xff0c;智慧教育已经成为引领未来的热门议题。随着科技的不断进步和教育观念的演进&#xff0c;数字化校园正逐渐变为现实。作为教育界的领导者&#xff0c;我们积极践行智慧教育理念&#xff0c;为学生们营造一个更智能、高效的学习环境。 教育是每个国家…

解决使用elmessage 没有样式的问题

错误情况 这里使用了一个消息提示&#xff0c;但是没有出现正确的样式&#xff0c; 错误原因和解决方法 出现这种情况是因为&#xff0c;在全局使用了按需导入&#xff0c;而又在局部组件中导入了ElMessage组件&#xff0c;我们只需要将局部组件的import删除就可以了 import…

致 粉丝de信

致 粉丝 -本文呢看不下去别看&#xff0c;但是学业是真的重要&#xff08;平常有信奥&#x1f62b;&#xff09;&#xff0c;电脑没收……更新可能得到暑假&#xff0c; 同学&#xff1a;小没苯agoe &#xff08;aaa&#xff0c;学霸&#xff01;&#xff01;&#xff01;&…

考研计组chap2数据的表示和运算(补充)

一、进位计数制 1.r进制 第i位表示r进制的权为i 2.进制转换 &#xff08;1&#xff09;r->10 对应位置数*权值 &#xff08;2&#xff09;2 -> 16 or 8 每三位2进制数可表示1位16进制 每四位2进制数可表示1位16进制 so 分开之后转为16进制即可 eg&#xff1a;11…

[AI里程碑]StableDiffusion3今日开源 | 首个开源超越Midjourney

⚡[AI里程碑]StableDiffusion3今日开源 | 首个开源超越Midjourney 2024年6月12日&#xff0c;Stable Diffusion 3 Medium的开源代表了生成式 AI 发展的一个重要里程碑。 StableDiffusion3模型分享在文末&#xff0c;需要的自取&#xff0c;免费分享&#xff01; Stable Diffusi…

ssm161基于web的资源共享平台的共享与开发+jsp

资源共享平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本资源共享平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处…