表格功能

功能项:

1、json动态,分批次加载表格数据

2、固定表格头部

3、播放表格数据

问题待解决:

定义类,实时更新数据(定义类保存表格行)。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" type="text/css" href="css/zgy.css">
    <style>
        table { width: 100%; table-layout: fixed; }
        td, th { height: 25px; line-height: 25px; border-right: 1px solid #ff4136; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; }
        .tb_head { overflow-x: hidden; }
        .tb_cont { height: 200px; overflow: auto; }
        .tdw { width: 180px; }
        .xuhao { width: 30px; }
        .empty { width: 27px; }
    </style>
</head>
<body>
<div class="fz">
    <div class="tb_head" id="tb_head">
        <table>
            <thead>
            <tr class="bg-grey">
                <th class="xuhao"></th>
                <th class="tdw">车牌号码</th>
                <th class="tdw">定位时间</th>
                <th class="tdw">接收时间</th>
                <th class="tdw">精度</th>
                <th class="tdw">速度</th>
                <th class="tdw">方向</th>
                <th class="tdw">里程</th>
                <th class="tdw">状态</th>
                <th class="tdw">附加信息</th>
                <th class="tdw">地理位置</th>
                <th class="empty"></th>
            </tr>
            </thead>
        </table>
    </div>
    <div class="tb_cont" id="tb_cont">
        <table id="dataTable">
            <tbody>
            </tbody>
        </table>
    </div>
    <!--<input type="button" value="更新数据" id="reBtn">-->
    <span id="msg"></span>
    <input type="button" value="播放" id="play">
    <input type="button" value="减慢" id="slowly">
    <input type="text" value="5" id="speedValue">
    <input type="button" value="加速" id="quickly">
</div>
</body>
<script src="js/jquery-1.9.1.min.js"></script>
<script>
    var contDiv = document.getElementById("tb_cont"); //2 3
    var tab = document.getElementById("dataTable");  //1 3
//    var rowSave;
    //    3 分批加载
    var scrollHeight = contDiv.offsetHeight; //数据滚动div的高度
    var tabH = 25;  //td的高度
    var loadingNum = 10; //每次加载行数
    var totalNum = 0; //已经加载的行数
    var loadingEnd = 0; //数据加载完毕标识
    //播放
    var scrollPosition = -5 * tabH;;//滚动条位置
    var currentPlayLine=0; //当前播放位置
    var playFlag=false; //控制播放/暂停
    var m_JiShiQi=null; //计时器
    var baseSpeed = 100;//基础移动速度
    var speedLv = 5;//移动速度等级
    //        定义json,初始化数据
    var arr = {
        "ChePaiHao": '湘AE4009',
        "DingWeiShiJian": '2015-01-25 09:04:12',
        "JieShouShiJian": '2015-01-25 09:03:52',
        "JingDu": '精确',
        "Speed": '54',
        "Direction": '',
        "Mileage": '145,515.00',
        "ZhuangTai": 'ACC关/卫星定位:锁定/定位模块:正常/通信模块:正常',
        "FuJiaXinxi": '停车时间:142分钟 车辆状态:车辆-熄火',
        "WeiZhi": '广东省佛山市南海区联和路'
    }
    var jsonstr = "[{'ChePaiHao':'粤AE4009','DingWeiShiJian':'2015-01-25 09:04:12','JieShouShiJian':'2015-01-25 09:03:52','JingDu':'精确','Speed':'54','Direction':'北','Mileage':'145,515.00','ZhuangTai':'ACC关/卫星定位:锁定/定位模块:正常/通信模块:正常','FuJiaXinxi':'停车时间:142分钟 车辆状态:车辆-熄火','WeiZhi':'广东省佛山市南海区联和路'}]";
    var jsonData = eval('(' + jsonstr + ')');
    for (var i = 0; i <= 1000; i++) {
        jsonData.push(arr);
    }
    $(function () {
//        1加载数据
        AddDT();
//        播放
        $("#play").click(function(){
            if(!playFlag) {
                Play();
            }else{
                Pause();
            }
        });
//        加/减速
        $("#quickly").click(function(){
            PlaySpeedAdd();
        });
        $("#slowly").click(function(){
            PlaySpeedMinus();
        });
////        更新数据
//        $("#reBtn").click(function () {
//            RefreshDT();
//        });
//        2表格固定
        contDiv.onscroll = function () {
//            纵向滚动
            if (CheckFlag()) {
                AddDT();
            }
//            横向滚动
            var scrollLeft = contDiv.scrollLeft;
            $("#tb_head").scrollLeft(scrollLeft);
        }

    });
    //判断是否滚动到加载
    function CheckFlag() {
        var lasttabHeight = (tab.rows.length - 1) * tabH;
        var scrollTop = document.getElementById("tb_cont").scrollTop;
        if (lasttabHeight < scrollHeight + scrollTop && loadingEnd == 0) {
            return true;
        }
    }
    //    1加载数据
    function AddDT() {
        var len = parseInt(totalNum + loadingNum);
        if (len >= jsonData.length) {
            len = jsonData.length;
            loadingEnd = 1;
        }
        $("#msg").html(totalNum + "+" + loadingNum + "+" + len + "+" + jsonData.length);
        for (var j = totalNum; j < len; j++) {
            var rowsNumber = tab.rows.length;
            var row = tab.insertRow(rowsNumber);

            var cell = row.insertCell();
            cell.innerHTML = row.rowIndex + 1;
            cell.setAttribute("class", "xuhao");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].ChePaiHao;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].DingWeiShiJian;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].JieShouShiJian;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].JingDu;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].Speed;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].Direction;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].Mileage;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].ZhuangTai;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].FuJiaXinxi;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            cell.innerHTML = jsonData[j].WeiZhi;
            cell.setAttribute("class", "tdw");

            cell = row.insertCell();
            rowSave = row;
        }
        totalNum = len;
    }
    //播放数据
    function ResetMkPoint(){
        $("#tb_cont").scrollTop(scrollPosition);
        $("#dataTable tr:eq(" + currentPlayLine + ")").addClass("red").siblings().removeClass("red");
        scrollPosition += tabH;
        currentPlayLine++;
        if(currentPlayLine<jsonData.length){
            m_JiShiQi = setTimeout(function () {
                ResetMkPoint();
            }, speedLv * baseSpeed);   //移动速度
        }
    }
//    //    更新数据
//    function RefreshDT() {
//        rowSave.cells[3].firstChild.nodeValue = "变更更";
//    }
//    播放
    function Play(){
        ResetMkPoint();
        $("#play").val("暂停");
        playFlag=true;
    }
//    暂停
    function Pause(){
        if (m_JiShiQi != null) {
            clearTimeout(m_JiShiQi);
        }
        $("#play").val("播放");
        playFlag=false;
    }
//    加速
    function PlaySpeedAdd(){
        speedLv--;
        if (speedLv <= 1) {
            speedLv = 1;
        }
        $("#speedValue").val(GetCurrentSpeed(speedLv));
    }
//    减速
    function PlaySpeedMinus(){
        speedLv++;
        if (speedLv >= 10) {
            speedLv = 10;
        }
        $("#speedValue").val(GetCurrentSpeed(speedLv));
    }
//    速度换算
    function GetCurrentSpeed(s) {
        switch (s) {
            case 1:
                return 10;
            case 2:
                return 9;
            case 3:
                return 8;
            case 4:
                return 7;
            case 5:
                return 6;
            case 6:
                return 5;
            case 7:
                return 4;
            case 8:
                return 3;
            case 9:
                return 2;
            case 10:
                return 1;
            default:
                1
        }
    }
</script>
</html>
View Code

原文地址:https://www.cnblogs.com/zhaojieln/p/4251932.html