a-table 定时平滑轮播组件

ops/2024/10/21 5:48:58/

效果图:

实现代码如下:

<template><div class="scroll-container" @mouseenter="stopScroll" @mouseleave="startScroll"><a-table:columns="columns":data-source="visibleData":pagination="false":scroll="{ y: '300px' }"row-class-name="scroll-row"ref="tableRef"><template #bodyCell="{ column, record, text }"><span>{{ text }}</span></template><template #headerCell="{ column }"><span>{{ column.title }}</span></template></a-table></div></template><script setup lang="ts">import { ref, onMounted, onBeforeUnmount } from "vue";// 定义表格列const columns = [{ title: "序号", dataIndex: "index", key: "index", width: "10%" },{ title: "名称", dataIndex: "projectName", key: "projectName", width: "30%" },{ title: "国别", dataIndex: "projectCountry", key: "projectCountry", width: "15%" },{ title: "总部", dataIndex: "region", key: "region", width: "15%" },{ title: "单位", dataIndex: "orgName", key: "orgName", width: "15%" },{ title: "经理", dataIndex: "projectManager", key: "projectManager", width: "15%" },];const dataSource = ref([{index: 1,projectName: "项目A",projectCountry: "中国",region: "华东",orgName: "组织A",projectManager: "经理A",},{index: 2,projectName: "项目B",projectCountry: "美国",region: "西部",orgName: "组织B",projectManager: "经理B",},{index: 3,projectName: "项目C",projectCountry: "德国",region: "北部",orgName: "组织C",projectManager: "经理C",},{index: 4,projectName: "项目D",projectCountry: "法国",region: "南部",orgName: "组织D",projectManager: "经理D",},{index: 5,projectName: "项目D",projectCountry: "法国",region: "南部",orgName: "组织D",projectManager: "经理D",},{index: 6,projectName: "项目D",projectCountry: "法国",region: "南部",orgName: "组织D",projectManager: "经理D",},{index: 7,projectName: "项目D",projectCountry: "法国",region: "南部",orgName: "组织D",projectManager: "经理D",},{index: 8,projectName: "项目D",projectCountry: "法国",region: "南部",orgName: "组织D",projectManager: "经理D",},// 添加更多数据以测试滚动效果]);const visibleData = ref([...dataSource.value]);const tableRef = ref(null);let scrollInterval: any = null;// 启动滚动const startScroll = () => {if (scrollInterval) return;scrollInterval = setInterval(() => {if (tableRef.value) {const tbody = tableRef.value!.$el.querySelector("tbody") as HTMLElement;const rows = Array.from(tbody.querySelectorAll("tr.scroll-row"));console.log(rows, "22222222222222");if (rows.length === 0) return;const firstRow = rows[0] as HTMLElement;const rowHeight = firstRow ? firstRow.offsetHeight : 0;// 启动动画tbody.style.transition = "transform 0.6s ease-in-out";tbody.style.transform = `translateY(-${rowHeight}px)`;setTimeout(() => {tbody.style.transition = "none";tbody.style.transform = "translateY(0)";if (firstRow) {tbody.appendChild(firstRow); // 将第一行移动到最后}}, 600); // 时间要与 transition 一致}}, 3000); // 每13秒滚动一次};// 停止滚动const stopScroll = () => {if (scrollInterval) {clearInterval(scrollInterval);scrollInterval = null;}};onMounted(() => {startScroll();});onBeforeUnmount(() => {stopScroll();});</script><style scoped lang="less">.scroll-container {// overflow: hidden;position: relative;height: 300px; /* 根据需要调整容器高度 */}.ant-table {width: 100%;border-collapse: collapse;}.ant-table thead {position: sticky;top: 0;background-color: #fff;z-index: 1; /* 确保表头层级高于内容 */}.ant-table tbody {display: block;max-height: 300px; /* 确保 tbody 的高度 */overflow-y: auto; /* 使 tbody 可滚动 */}.ant-table tbody tr {display: table;width: 100%;table-layout: fixed;}.scroll-row {// transition: transform 0.6s ease-in-out;// min-height: 48px; /* 根据需要设置每行的最小高度 */background: red;}.ant-table tbody tr:nth-child(odd) {background-color: #f9f9f9;}.ant-table tbody tr:nth-child(even) {background-color: #fff;}</style>


http://www.ppmy.cn/ops/110129.html

相关文章

【Google Chrome Windows 64 version及 WebDriver 版本】

最近升级到最新版本Chrome后发现页面居然显示错乱实在无语, 打算退回原来的版本, 又发现官方只提供最新的版本下载, 为了解决这个问题所有收集了Chrome历史版本的下载地址分享给大家. Google Chrome Windows version 64 位 VersionSize下载地址Date104.0.5112.10282.76 MBhtt…

HarmonyOS开发实战( Beta5.0)使用ArkUI的FrameNode扩展实现动态布局类框架详解

鸿蒙HarmonyOS开发往期必看&#xff1a; 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; HarmonyOS NEXT应用开发性能实践总结 简介 在特定的节假日或活动节点&#xff0c;应用通常需要推送相…

swagger-bootstrap-ui页面空白,也没报错

回想起来&#xff0c;代码层面没有进行什么大的调整&#xff0c;增加了配置文件&#xff0c;application.yml中的 spring:profiles:active: sms # dev --> smsname: sms-server swagger配置未调整导致空白 修改profile 问题解决

物联网控制箱

随着科技的飞速发展&#xff0c;物联网&#xff08;Internet of Things, IoT&#xff09;技术已经深入我们生活的方方面面&#xff0c;从智能家居到智慧城市&#xff0c;从工业制造到农业管理&#xff0c;物联网正以前所未有的方式改变着世界。唯众的物联网控制箱正是这一趋势下…

2024年语音识别转文字工具的崛起

无论是繁忙的会议记录、远程教学的即时笔记&#xff0c;还是日常生活的语音备忘&#xff0c;只需轻轻一说&#xff0c;便能瞬间转化为清晰可编辑的文字&#xff0c;这种便捷与高效无疑为现代生活增添了无限可能。本文将带你深入探索语音识别转文字工具的奥秘。 1.365在线转文字…

TCP全连接队列和tcpdump抓包

全连接队列 listen第二个参数 服务器在调用listen的时候&#xff0c;listen的第二个参数 1&#xff0c;就是TCP全连接队列的长度。 当客户端的连接进入established 状态后&#xff0c;如果服务器没有调用accept将连接取走&#xff0c;那么该连接就会待在TCP全连接队列中&a…

精准电商营销:基于京东商品详情API返回值的数据分析

精准电商营销是现代电商领域中的关键策略之一&#xff0c;它依赖于对大量数据的深入分析和有效应用。京东商品详情API&#xff08;Application Programming Interface&#xff09;为商家和开发者提供了一种获取商品详细信息的方式&#xff0c;这些详细信息包括但不限于商品价格…

Kafka 实战演练:创建、配置与测试 Kafka全面教程

文章目录 1.配置文件2.消费者1.注解方式2.KafkaConsumer 3.依赖1.注解依赖2.KafkaConsumer依赖 本文档只是为了留档方便以后工作运维&#xff0c;或者给同事分享文档内容比较简陋命令也不是特别全&#xff0c;不适合小白观看&#xff0c;如有不懂可以私信&#xff0c;上班期间都…