当前位置: 首页 > news >正文

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>
http://www.jsqmd.com/news/873578/

相关文章:

  • 小红书实况图怎么去水印?2026年三种实测有效的保存方法 - 科技热点发布
  • 如何用代码缺陷率评估代码质量与团队产出效率——从单一指标到量化管理体系的升级路径
  • 从玩具到生产:企业级 Agent 平台需要什么样的 CLI 工具
  • 3C数码品牌主必问:2026年做GEO优化该找谁?这份选型指南给出答案 - GEO优化
  • 2026年抖音去水印工具实测排行榜:这5个方法最好用,第一名免费且秒出结果 - 科技热点发布
  • 如何快速使用NHSE:动物森友会存档编辑的终极教程
  • 季度总结 PPT 模板大揭秘!这几家好用模板平台,职场汇报直接拿捏 - 品牌测评鉴赏家
  • 2026即梦怎么去除水印?即梦去水印教程用这三个方法秒搞定,最后一个免费又好用 - 科技热点发布
  • 134、运动控制中的通信协议:实时以太网对比
  • 小红书去水印下载用什么工具?2026年亲测免费无广告的神器都在这里了 - 科技热点发布
  • AI Agent系统设计:稳定性不是靠模型更聪明,而是靠减少例外
  • 戴森球计划终极蓝图仓库:5步快速构建完美自动化工厂的完整指南
  • 线路板清洁度萃取设备/清洗机2026靠谱排名,西恩士工业 - 工业设备研究社
  • 口碑超棒!苏州专业家具店大揭秘,究竟哪家才是首选? - 资讯纵览
  • Redis for Windows 2025终极指南:从零开始搭建高性能内存数据库
  • 135、运动控制中的同步机制:分布式时钟
  • 构建AI Agent系统的可观测性:从“盲目信任“到“可视化治理“
  • 移动储能车远程管理平台解决方案
  • QMCDecode:基于Swift的QQ音乐加密格式解析与转换方案
  • 【光学】偏振光线追迹Matlab仿真
  • 鸿蒙electron跨端框架PC青简笔记实战:从笔记列表、编辑器到桌面导出,一次做完整
  • 用weelinking大模型聚合平台深度测评Codex VS Claude Code:谁才是真正的AI编程之王?
  • 136、运动控制中的同步机制:时间戳与触发
  • 2026年京东云OpenClaw/Hermes Agent配置Token Plan安装保姆级分享
  • 如何快速配置TQVaultAE:泰坦之旅玩家的终极装备管理与存档扩展指南
  • AutoUnipus:三步搞定U校园自动化答题,零基础实现100%正确率的终极解决方案
  • 基于改进粒子群算法的混合储能系统容量优化附Matlab代码
  • FastGithub终极指南:3步解决GitHub访问卡顿,让开发效率提升5倍
  • Python学习教程(六)数据结构List(列表)
  • 137、运动控制中的故障诊断与安全机制