原生table设置自动滚动轮播

首先我们需要给表格tbody一个高度,如何增上高度需要一下代码

table tbody {
    display: block;
    height: 500px;
    overflow: hidden;
}

table thead,
tbody tr,
tfoot tr {
    display: table;
    width: 100%;
    height: 40px;
    table-layout: fixed;
    text-align:center;
}
table thead {
    width: calc( 100% - 1em)

}

给 tbody 加一个 ref=“aa”

 move(start, end) {
            var step = 0;
            var maxStep = 16;
            var everyStep = (end - start) / maxStep;
            var moveTimer = setInterval(() => {
                step++;
                if (step <= maxStep) {
                    this.$refs.aa.scrollTop = this.$refs.aa.scrollTop + everyStep;
                } else {
                    clearInterval(moveTimer);
                }
            }, 120);
},

对于maxStep 和moveTimer 定时器时间是可以 根据具体情况改的 达到你想要的效果

clock() {
            var num = 0;
            setInterval(() => {
                num++;
                if (num > (this.sumNum - 8)) {
                    num = 0;
                }
               
                this.move(this.$refs.aa.scrollTop, 60 * num);
            }, 2000);



        },

我的this.sumNum 是所有的数据 减8是我的表格默认显示了8条数据 

60*num 也是根据情况自己改, 此定时器的时间也是可以自行修改的。

如果dom还没有加载 拿不到你请求的数据的话 可以这样调用方法

this.$nextTick(() => {
    this.clock();
});
### 使用 Vue 3 和 `el-table` 组件实现自动滚动Vue 3 中使用 `el-table` 实现自动滚动功能可以通过自定义逻辑来完成,因为官方并没有提供直接支持此特性的属性[^1]。为了达到这一目的,可以利用 JavaScript 的定时器函数配合 CSS 或者原生 DOM 操作来进行。 #### 方法一:基于时间间隔的自动滚动 这种方法适用于简单的场景,比如展示公告栏或轮播图等不需要复杂交互的情况。以下是具体实现方式: ```javascript <template> <div ref="tableContainer" style="overflow-y: auto; height: 300px;"> <el-table :data="visibleData"> <!-- 表格列配置 --> </el-table> </div> </template> <script setup> import { ref, onMounted } from 'vue'; const tableContainer = ref(null); let intervalId; onMounted(() => { startAutoScroll(); }); function startAutoScroll() { let scrollTop = 0; const containerHeight = tableContainer.value.clientHeight; intervalId = setInterval(() => { scrollTop += 1; if (scrollTop >= containerHeight) { scrollTop = 0; } tableContainer.value.scrollTop = scrollTop; }, 20); // 调整速度可通过改变毫秒数控制 } </script> ``` 上述代码片段展示了如何创建一个具有固定高度并允许垂直滚动的内容容器,并设置了一个每20ms增加一次顶部偏移量(`scrollTop`)的时间循环,从而实现了平滑向下的自动滚动效果。当滚动条到达底部时会重置回初始位置继续向上移动。 #### 方法二:结合鼠标事件优化用户体验 对于更复杂的业务需求,如希望用户能够暂停/恢复滚动以及进行手动拖拽,则可以在方法一的基础上加入相应的监听处理程序: ```javascript // ... 上述模板部分保持不变 ... <script setup> import { ref, onMounted, watchEffect } from 'vue'; import { useMouse } from '@vueuse/core'; const tableContainer = ref(null); let isPaused = false; let intervalId; onMounted(() => { startAutoScroll(); // 添加鼠标进入离开事件监听 tableContainer.value.addEventListener('mouseenter', pauseScrolling); tableContainer.value.addEventListener('mouseleave', resumeScrolling); // 利用 vue-use 库获取当前鼠标的坐标状态 const mousePosition = useMouse({ type: 'client' }); watchEffect(() => { if (!isPaused && mousePosition.x > 0 && mousePosition.y > 0 && mousePosition.x < window.innerWidth && mousePosition.y < window.innerHeight) { clearInterval(intervalId); setTimeout(resumeScrolling, 5000); // 鼠标静止一段时间后重新启动滚动 } }); }); function startAutoScroll() { let scrollTop = 0; const containerHeight = tableContainer.value.clientHeight; intervalId = setInterval(() => { scrollTop += 1; if (scrollTop >= containerHeight || isPaused) return; tableContainer.value.scrollTop = scrollTop; }, 20); } function pauseScrolling() { isPaused = true; clearInterval(intervalId); } function resumeScrolling() { isPaused = false; startAutoScroll(); } </script> ``` 这段增强版脚本不仅保留了原有的自动滚动特性,还增加了对用户的友好互动体验——当光标位于表格区域内时停止滚动;一旦检测到长时间无操作则自动重启滚动过程。此外,也考虑到了边界条件以防止越界错误的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值