千家信息网

小程序怎么实现tab卡片切换功能

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍小程序怎么实现tab卡片切换功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、UI与交互首先我们来看看要实现的ui模样和交互效果吧,下图是我们的一个入口,以
千家信息网最后更新 2026年11月02日小程序怎么实现tab卡片切换功能

这篇文章主要介绍小程序怎么实现tab卡片切换功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、UI与交互

首先我们来看看要实现的ui模样和交互效果吧,下图是我们的一个入口,以下的每一个icon区域点击进去都会展示对应的卡片展示。

例如我点击tab2这一个icon时,对应跳转到如下图所示。

该页面的展示为头部是一长条tab栏,左右可滑动,两边需要留出空白区域以实现两端的tab可实现居中效果,点击对应的tab可展示相应的卡片,且该tab的文字会居中展示。类似轮播图左右切换的效果,我想作为用户应该很容易可以想到这种交互。

当前激活的卡片会有一个感觉比别的卡片稍微大那么一点点的效果,且可看见前后的卡片的边。且该卡片区域也可左右滑动实现与头部tab栏一样交互的效果。

大概就是这样的一个交互效果啦!

二、实现方案的设计

1、首先我们需要知道前端展示的所有tab是一直都这样展示这么多个吗,还是说有可能后续会扩展,再或许说有可能在这上面进行迭代。我个人认为这里可以跟后端商量一下,将我们需要展示的内容统一做成一套常量配置,然后就可以做出我们的动态渲染了。在这里我是大概维护了这样的一个constant。

data: [  {    title: 'tab2', // 标题    logoUrl: 'xxx', // 图标地址    isNeed: false, // 是否需要该tab     id: '', // 每个tab对应的一个id,与后端交互使用    content: '' // 每个tab对应的一些内容,用于扩展    ...  }]

就是大概的这样以上的一个数据结构。

2、在入口处点击对应icon时可以把相对应的数组index或者id带入详情页面,以实现对应的卡片展示以及对应的ui

3、在详情页面的设计中,我将该页面分成两个组件展示。

  • Header为对应的scroll-tab组件,在该组件中我使用了微信小程序提供的组件scroll-view,在这里我们需要给其设置scroll-x的参数使其能够进行左右滑动,设置scroll-left参数实现我们点击某个tab或者滑动卡片时能够滚动到中间去。

  • Content为对应的swiper-card组件,在该组件中我使用了微信小程序提供的组件swiper,在这里我们需要给其设置previous-margin和next-margin属性设置当前卡片与前后两张卡片的距离,current属性设置当前展示的卡片,bindchange事件用于卡片切换时的交互。

  • index页面传参我选择传对应的一些数据以及current值和事件处理函数

        

4、具体实现

  • 对于Header的tab栏两边留出可滑动的空间,因为scroll-view内部元素是无法占满该tab的宽度的,因此我们没有办法给其设置100%来实现。在这里我开始的想法是给其前后放置一个空白元素来给其宽度实现,后面参考了某个写法用了page-meta这个我也不太清楚是什么鬼的组件来设置左右的padding来实现,但是会有page-meta只用于页面首个节点的warning。对于两边距离的的设置,和scroll-left的设置,我采用了以下方法。

wx.getSystemInfo({          success: res => {            this.marginWidth = res.windowWidth / 2 // 两边空白距离          }        })                const computedPosition = (margin, textArr, preWidthArr) => {  // margin每个tab之间的间距  // textArr为所有tab的文字宽度的数组  // preWidthArr为每一个tab与前一个tab的距离数组,第一个默认为0  let distanceArr = []  let len = textArr?.length  for (let i = 0; i < textArr?.length; i++) {    distanceArr.unshift(preWidthArr[len - 1] + (len - 1) * margin + textArr[len - 1] / 2)    len--  }  // distanceArr为每个tab居中展示时应该设置的scroll-left值  return distanceArr}// textArr[n] = 第 n - 1元素的宽度// const widthArr = [78, 78, 78, 52, 52, 52]// preWidthArr[n] = 第n - 1个tab距离前面tab的距离 = 元素宽 + margin// 第一个tab没有前面的元素// const arr = [0, 78, 156, 234, 286, 338]// 获取元素信息getElementAttr() {        wx.createSelectorQuery()          .in(this)          .selectAll('.swiper-text__item')          .boundingClientRect(res => {            const textWidth = res?.map(item => item.width)            const preWidth = this.getPreWidth(textWidth)            this.distanceArr = computedPosition(MARGIN, textWidth, preWidth)          })          .exec()},getPreWidth(textWidth) {        const arr = [0]        for (let i = 0; i < textWidth.length - 1; i++) {          arr.push(textWidth[i] + arr[i])        }        return arr}
  • 对于Content内容区域的卡片,可以给当前卡片与别的卡片设置不同的transfrom: scale(倍数),并且给一个过渡效果transition即可实现简单的交互效果。

以上是"小程序怎么实现tab卡片切换功能"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

卡片 效果 组件 页面 内容 程序 切换 区域 宽度 数组 空白 功能 事件 元素 入口 参数 头部 就是 属性 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技图片 湖北九亚互联网络科技有限公司 互联网科技工作委员会 科技互联网项目 万易互联网科技有限公司 紫鲸互联网科技 碳银互联网科技 新华互联网科技2019 承德科技产业互联网发展 青海科技产业互联网发展 深圳市罗太互联网科技有限公司 国大互联网教育科技有限公司薪资 互联网金融科技元年 黑科技 体验场景 互联网大会 江苏苏星互联网科技有限公司 郑州欣桑互联网科技有限公司 互联网科技接地气 长沙渺峰互联网科技有限公司 互联网高科技绘画 现代科技的标志之一的互联网 手冲咖啡和咖啡机区别 互联网前沿科技 美国互联网前沿科技 顺网科技2021年互联网排名 佛山市拉法互联网科技有限公司 爱医互联网络科技 朱啸虎曾投资哪些互联网科技企业 新氧科技和美国互联网有关系吗 互联网科技企业商标注意事项 青岛易易互联网科技
0