uniapp中scrollview配合swiper实现一个简单的tab标签页

news/2024/12/5 2:18:51/
<template><view class="tab-container"><!-- Tab 标签滚动容器 --><scroll-view scroll-x="true" class="tab-scroll" scroll-with-animation="true"><view class="tab-list"><viewv-for="(item, index) in tabs":key="index"class="tab-item":class="{ active: currentIndex === index }"@click="changeTab(index)">{{ item.name }}</view></view></scroll-view><!-- 内容区域 --><swiper:current="currentIndex"class="swiper-content"@change="onSwiperChange":duration="300"scroll-x="true"><swiper-item v-for="(item, index) in tabs" :key="index"><view class="swiper-item-content"><!-- 内容区域的具体内容 --><view>{{ item.name }} Content</view></view></swiper-item></swiper></view>
</template>
<script lang="ts">
import { ref } from 'vue';export default {setup() {const tabs = ref([{ name: 'Tab 1' },{ name: 'Tab 2' },{ name: 'Tab 3' },{ name: 'Tab 4' },// { name: 'Tab 5' },// { name: 'Tab 6' },// { name: 'Tab 7' },// { name: 'Tab 8' },// { name: 'Tab 9' },// ... 更多 Tab]);const currentIndex = ref(0);const changeTab = (index: number) => {currentIndex.value = index;};const onSwiperChange = (e: any) => {currentIndex.value = e.detail.current;};return {tabs,currentIndex,changeTab,onSwiperChange,};},
};
</script>
<style>
.tab-container {width: 100%;
}.tab-scroll {white-space: nowrap;overflow-x: auto;
}.tab-list {display: flex;
}.tab-item {padding: 10px 20px;cursor: pointer;position: relative;
}.tab-item.active {color: #f10606;
}.swiper-content {height: 300px; /* 设置内容区域的高度 */
}.swiper-item-content {width: 100%;height: 100%;box-sizing: border-box;padding: 20px;
}
.active::after {content: '';position: absolute;/* background-image: url(../../static/checkDetails/action.png); */background-size: 100%;background: #f00;background-repeat: no-repeat;width: 40px;height: 4px;top: 38px;left: 30px;
}
</style>

基本思路

1横向滚动的动画效果主要依靠scrollview自带的croll-with-animation="true"来设置

2 而底部下划线则是给当前激活的tab设置伪元素来实现


http://www.ppmy.cn/news/1552440.html

相关文章

yagmail邮件发送库:如何用Python实现自动化邮件营销?

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

React Native学习笔记(一)

一、创建ReactNative项目 1.1、指令创建 React Native 有一个内置的命令行界面&#xff0c;你可以用它来生成一个新项目。您可以使用 Node.js 附带的 访问它&#xff0c;而无需全局安装任何内容。让我们创建一个名为“AwesomeProject”的新 React Native 项目 npx react-nati…

【linux】(26)shell脚本-变量、位置变量

定义和使用变量 定义变量 在 Shell 脚本中定义变量非常简单&#xff0c;直接赋值即可&#xff1a; #!/bin/bash name"Alice"注意&#xff0c;等号两边不能有空格。 使用变量 使用变量时需要在变量名前加上 $ 符号&#xff1a; #!/bin/bash name"Alice&quo…

llamaindex实战-ChatEngine-ReAct Agent模式

概述 ReAct 是一种基于Agent的聊天模式&#xff0c;构建在数据查询引擎之上。对于每次聊天交互&#xff0c;代理都会进入一个 ReAct 循环&#xff1a; 首先决定是否使用查询引擎工具并提出适当的输入 &#xff08;可选&#xff09;使用查询引擎工具并观察其输出 决定是否重复…

C. Raspberries

time limit per test 2 seconds memory limit per test 256 megabytes You are given an array of integers a1,a2,…,ana1,a2,…,an and a number kk (2≤k≤52≤k≤5). In one operation, you can do the following: Choose an index 1≤i≤n1≤i≤n,Set aiai1aiai1. F…

【k8s】kubelet 的相关证书

在 Kubernetes 集群中&#xff0c;kubelet 使用的证书通常存放在节点上的特定目录。这些证书用于 kubelet 与 API 服务器之间的安全通信。具体的位置可能会根据你的 Kubernetes 安装方式和配置有所不同&#xff0c;下图是我自己环境【通过 kubeadm 安装的集群】中的kubelet的证…

单台服务器上创建多个端口MySQL服务

单台服务器上创建多个端口MySQL服务 直接拷贝已经运行的数据库文件: # ll /data/mysql/ 总用量 204 drwxr-x--- 2 mysql mysql 4096 9月 15 2023 bin -rw-r--r-- 1 mysql mysql

ubuntu查看本地镜像源可用的deb包

在Ubuntu系统中&#xff0c;查看本地镜像源可用的deb包可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;使用apt-cache命令 apt-cache命令可以用来查询本地和远程的软件包信息。你可以使用以下命令来查看本地镜像源可用的deb包&#xff1a; apt-cache search .这个…