news 2026/5/23 22:28:28

vue3 大屏列表轮播,使用transition-group

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vue3 大屏列表轮播,使用transition-group

一、transition-group介绍

transition-group 是 Vue 框架中专门用来给列表添加动画效果的内置组件‌,它能让你在做添加、删除或排序列表项时,看到平滑的过渡动画 。‌‌‌

对应的css:

例如:transition-group的类名为 list

动画类名就为:

list-enter-active、list-leave-active 控制动画过程,list-enter-from、list-leave-to 控制开始结束状态

二、代码实现

<template> <div @mouseenter="pauseCarousel" @mouseleave="resumeCarousel"> <transition-group class="contentBox" name="carousel" tag="div"> <div v-for="item in rows" :key="item.id"> <div class="content"> <el-image class="img" :src="item.shop_logo || slaughterDefault" /> <div class="info"> <el-text class="text" line-clamp="2">{{ item.name }}</el-text> <div class="detail"> <span class="count">累计屠宰:{{ item.total_quantity }}头</span> <div class="rating"> <span>好评率:</span> <el-rate v-model="item.positiveRating" size="small" disabled-void-color="#272C1B" disabled /> <span class="ratingNum">{{ item.good_rate }}%</span> </div> </div> </div> </div> </div> </transition-group> </template> <script lang="ts" setup> import { onMounted, onBeforeUnmount, ref, watch } from 'vue' // 数据 const data: any = ref([]) // 轮播 const rows = ref([]); const currentIndex = ref(3); // 从第4个开始(索引3) const isAnimating = ref(false); const isPaused = ref(false); // 暂停状态 const timer = ref(null); // 定时器 onMounted(async() => { // 获取数据 await getData() }) onBeforeUnmount(() => { clearInterval(timer.value) }) const getData = async() => { try { // 自己的接口获取数据 // 显示几条就截取几条 rows.value = data.value.slice(0, 3) if (data.value.length > 0) { startCarousel() } } catch (error) { console.error("获取数据失败:", error); data.value = [] } } // 轮播动画 const startAnimation = () => { if (isAnimating.value || isPaused.value) return; isAnimating.value = true; // 移除第一条数据(会触发动画) rows.value.shift(); // 添加下一条数据(循环整个列表) const nextItem = data.value[currentIndex.value % data.value.length]; rows.value.push(nextItem); currentIndex.value++; // 重置索引到0如果已经到达列表末尾 if (currentIndex.value >= data.value.length) { currentIndex.value = 0; } // 等待动画完成后重置状态 setTimeout(() => { isAnimating.value = false; }, 400); }; // 开始轮播 const startCarousel = () => { clearInterval(timer.value); // 先清除已有定时器 if (data.value.length > 3) { timer.value = setInterval(startAnimation, 3000); } }; // 暂停轮播 const pauseCarousel = () => { isPaused.value = true; clearInterval(timer.value); }; // 继续轮播 const resumeCarousel = () => { isPaused.value = false; startCarousel(); // 重新开始轮播 }; </script> <style lang="scss" scoped> /* 轮播过渡动画 - 边轮播边过渡 */ .carousel-enter-active { transition: all 0.5s ease-out; z-index: 10; } .carousel-leave-active { transition: all 0.5s ease-in; position: absolute; width: 100%; left: 0; right: 0; } .carousel-enter-from { opacity: 0; transform: translateY(100%); } .carousel-leave-to { opacity: 0; transform: translateY(-100%); } .carousel-move { transition: transform 0.5s ease; } </style>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 22:28:04

XQuery 总结

XQuery 总结 引言 XQuery 是一种用于查询结构化数据的语言,主要用于处理 XML 和 XSD 数据。自其诞生以来,XQuery 已经成为处理 XML 数据的强大工具。本文将总结 XQuery 的基本概念、语法、常用函数和操作,以帮助读者更好地理解和使用 XQuery。 XQuery 基本概念 1. XQuer…

作者头像 李华
网站建设 2026/5/23 22:27:03

139、运动控制中的安全功能:安全PLC与安全总线

运动控制中的安全功能:安全PLC与安全总线 从一次差点“炸机”的调试说起 几年前调试一台六轴机器人,客户要求末端执行器在碰到人时必须100ms内停止。我们用了标准PLC加普通EtherCAT,逻辑上写了“碰撞检测→急停输出”,现场测试时却出了大问题——信号从传感器到PLC再到驱…

作者头像 李华
网站建设 2026/5/23 22:21:30

【光学】偏振光线追迹Matlab仿真

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。&#x1f34e;完整代码获取 定制创新 论文复现点击&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f3…

作者头像 李华
网站建设 2026/5/23 22:17:55

从零打造 AI 小说创作平台(七):续写、改编与润色流水线

从零打造 AI 小说创作平台(七):续写、改编与润色流水线 系列:从零打造 AI 小说创作平台 NovelForge 篇章:第 7 篇 / 共 10 篇 关键词:LangGraph、续写、改编、润色、上下文分析、版本对比 前言 六阶段流水线解决"从零创作"的问题。但作者更常见的需求是:对已…

作者头像 李华
网站建设 2026/5/23 22:15:20

硬件错误HardFault

1、找到报硬件错误前调用了哪些函数&#xff1a;如图是在调用HAL_CAN_AddTxMessage这个函数时&#xff0c;报了硬件错误然后可以在这个函数里面&#xff0c;打断点一个一个看&#xff0c;是调用哪个出问题的。其实不是445出问题&#xff0c;是08000592出问题正确的调用如上&…

作者头像 李华