table数据自动滚动

思路

看上去滚动,其实做法就是把第一行数据移到最后面
table数据自动滚动_第1张图片

主要代码

body添加一个表格


<table id="testTable">
    <thead>
        <tr>
            <th>idth>
            <th>titleth>
            <th>userIdth>
        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>Documenttitle>
    <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>idth>
                <th>titleth>
                <th>userIdth>
            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>

你可能感兴趣的:(javascript,前端)