table数据自动滚动

思路

看上去滚动,其实做法就是把第一行数据移到最后面
效果

主要代码

body添加一个表格

<!-- 创建一个表格 -->
<table id="testTable">
    <thead>
        <tr>
            <th>id</th>
            <th>title</th>
            <th>userId</th>
        </tr>
    </thead>
</table>

全局变量:

let data = [];	// 表格数据
let intervals = {};	// 存放多个定时器

获取测试数据:

 // 获取表格数据
 function getTableData() {
     $("#testTable").DataTable({
         ajax: {
             url:"https://jsonplaceholder.typicode.com/posts",	// 测试数据
             type: 'get',
             dataSrc: function(res){
                 console.log(res);
                 return res;
             },
         },
         columns: [
             { data: 'id' },
             { data: 'title' },
             { data: 'userId' },
         ],
         paging: false,
         searching: false,
         ordering: false,
         scrollY: '500'
     });
     setTableRoll("testTable");	// 获取数据后自动滚动
 }

因为可能会涉及多个表格,创建了公共的滚动方法:

// 设置表格自动滚动 —— divName 是元素id名称
function setTableRoll(divName) {
    intervals[divName] = setInterval(function() {
        let tbodyDom = $("#" + divName).find("tbody"), trDom = tbodyDom.find('tr:first'), trHeight = trDom.height();
        tbodyDom.animate({
            // marginTop: -trHeight+'px'
        }, 600, function() {
            // tbodyDom.css('marginTop', 0);
            trDom.css("marginTop", 0).appendTo(tbodyDom);
        })
    }, 3000)
}

我看到好多博客都有加这两个代码marginTop: -trHeight+'px'tbodyDom.css('marginTop', 0)不知道有什么用?我注释了效果会有,没注释效果也没有变化

添加移入移出表格,设置暂停和开始滚动:

$("#testTable").hover(function() {
    clearInterval(intervals['testTable'])
}, function() {
    setTableRoll("testTable")
})

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./plugins/jquery-3.6.3.min.js"></script>
    <link rel="stylesheet" href="./plugins/DataTables/datatables.min.css">
    <script src="./plugins//DataTables/datatables.min.js"></script>
    <style>
        
    </style>
</head>

<body>
    <table id="testTable">
        <thead>
            <tr>
                <th>id</th>
                <th>title</th>
                <th>userId</th>
            </tr>
        </thead>
    </table>
    <script>
        let data = [];
        let intervals = {};
        // https://jsonplaceholder.typicode.com/comments?postId=1
        $(function() {
            getTableData();

            $("#testTable").hover(function() {
                clearInterval(intervals['testTable'])
            }, function() {
                setTableRoll("testTable")
            })
        })

        // 获取表格数据
        function getTableData() {
            $("#testTable").DataTable({
                ajax: {
                    url:"https://jsonplaceholder.typicode.com/posts",
                    type: 'get',
                    dataSrc: function(res){
                        console.log(res);
                        return res;
                    },
                },
                columns: [
                    { data: 'id' },
                    { data: 'title' },
                    { data: 'userId' },
                ],
                paging: false,
                searching: false,
                ordering: false,
                scrollY: '500'
            });
            setTableRoll("testTable");
        }

        // 设置表格自动滚动
        function setTableRoll(divName) {
            console.log(divName);
            intervals[divName] = setInterval(function() {
                let tbodyDom = $("#" + divName).find("tbody"), trDom = tbodyDom.find('tr:first'), trHeight = trDom.height();
                tbodyDom.animate({
                    // marginTop: -trHeight+'px'
                }, 600, function() {
                    // tbodyDom.css('marginTop', 0);
                    trDom.css("marginTop", 0).appendTo(tbodyDom);
                })
            }, 3000)
        }
    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值