原生JS实现表格无缝循环滚动代码详解

作者:竹影时间:2026-10-23 23:51:50浏览:150

本文介绍了如何使用原生JavaScript和CSS实现表格内容的无缝循环滚动效果。通过克隆tbody节点、动态计算滚动距离以及利用定时器控制位置重置,实现了数据可视区域的持续更新。文章提供了完整的HTML结构、CSS样式及JS核心逻辑代码,适用于需要展示大量数据且希望保持界面整洁的场景。

原生JS实现表格无缝循环滚动代码详解

本文分享了一个使用JavaScript实现表格内容循环滚动的具体代码示例,供开发者参考。

CSS样式定义

CSS样式定义


table{width: 500px;border: 1px solid gray;border-collapse: collapse;}
th,td{line-height: 35px;border: 1px solid gray;text-align: center;width: 120px;}
.scroll-box{height: 280px;width: 500px;overflow: hidden;position: relative;}
.tab-scroll{position: absolute;left: 0;top: 0;border-top: none;}
.tab-scroll td{border-top: none;}

HTML页面结构布局

HTML页面结构布局


<table class="top">
 <thead>
 <tr>
 <th>ID</th>
 <th>姓名</th>
 <th>年龄</th>
 <th>住址</th>
 </tr>
 </thead>
 </table>
 <div class="scroll-box">
 <table class="tab-scroll">
 <tbody>
 <tr>
 <td>1001</td>
 <td>李四</td>
 <td>AAAA</td>
 <td>AAAA</td>
 </tr>
 <tr>
 <td>1002</td>
 <td>王五</td>
 <td>AAAA</td>
 <td>AAAA</td>
 </tr>
 <tr>
 <td>1003</td>
 <td>王五</td>
 <td>AAAA</td>
 <td>AAAA</td>
 </tr>
 <tr>
 <td>1004</td>
 <td>Jack</td>
 <td>AAAA</td>
 <td>AAAA</td>
 </tr>
 <tr>
 <td>1005</td>
 <td>小兰</td>
 <td>AAAA</td>
 <td>AAAA</td>
 </tr>
 <tr>
 <td>1006</td>
 <td>王五</td>
 <td>AAAA</td>
 <td>AAAA</td>
 </tr>
 <tr>
 <td>1007</td>
 <td>王五</td>
 <td>AAAA</td>
 <td>AAAA</td>
 </tr>
 <tr>
 <td>1008</td>
 <td>Jack</td>
 <td>AAAA</td>
 <td>AAAA</td>
 </tr>
 <tr>
 <td>1009</td>
 <td>小兰</td>
 <td>AAAA</td>
 <td>AAAA</td>
 </tr>
 </tbody>
 </table>
</div>

JavaScript核心逻辑代码

JavaScript核心逻辑代码


var sTab = document.getElementsByClassName('tab-scroll')[0];//要滚动的表
 var tbody = sTab.getElementsByTagName('tbody')[0];//要滚动表格的内容
 sTab.appendChild(tbody.cloneNode(true));//追加一次滚动内容,以防滚动后可视区域无内容
 var speed = sTab.getElementsByTagName('td')[0].offsetHeight+3;//每次滚动的距离
 var tbdh = tbody.offsetHeight+1;//整个表的高度,是因为上边的边不算滚动
 
 function scrollTop() {
 var t = sTab.offsetTop;//获取要滚动表的位置
 if (-tbdh == t) {//比较 滚动的距离等于整个表的高度 即第一个表完全看不见
 sTab.style.transition = '0s';//过渡动画设为0秒
 sTab.style.top = 0;//位置设为初始位置
 scrollTop();//因为偷梁换柱消耗了一次过程,所以把这一次过程补回来
 }else{
 sTab.style.transition = '1s';
 sTab.style.top = t - speed + 'px';
 }
 }
setInterval(scrollTop, 1000);

滚动逻辑解析示意图

滚动逻辑解析示意图

原生JS实现表格无缝循环滚动代码详解

接着执行滚动动作...

原生JS实现表格无缝循环滚动代码详解

将位置偷偷重置为初始状态(即跳过过渡动画直接将top设为0),随后恢复正常的过渡动画继续滚动

原生JS实现表格无缝循环滚动代码详解

思路扩展:轮播图应用

部分轮播图组件也可采用此思路(该思路灵感源自轮播图实现),若需查看轮播图相关逻辑,可将上述思路图旋转90度即可理解

以上就是本文的全部内容,希望对各位的学习有所帮助,同时也欢迎大家继续支持本站。

作者最新文章