table标签冻结列示例

2018-08-29  本文已影响429人  纳米君

来源:冻结列fixTable方法


用前端框架的话,column基本都有frozen属性。只用单纯的table,就需要借助js了。网上看到纯css版本的,根本不起作用。
先看效果图:


image.png

HTML代码:

<div id="divReport" style="width: 600px;">
    <table id="tableContent" class="define-table">

    </table>
</div>

CSS代码:

<style>
.define-table{
    border-collapse:collapse;
    border-spacing:0;
    border-left:1px solid #888;
    border-top:1px solid #888;
}
.define-table td{
    border-right:1px solid #888;
    border-bottom:1px solid #888;
    padding:5px 15px;
    height: 40px;
}
.define-table tr:nth-child(even){
    background-color: #ccc;
}
</style>

js代码:

<!-- jquery依赖-->
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>

$(function(){
    var html = '<tr>';
    for (var i = 0;i < 50;i++){
        html += '<td>'+i*100+'</td>';
    }
    html += '</tr>'
    $("#tableContent").append(html);
    $("#tableContent").append(html);
    
    var width = $("#divReport").width();
    var height = $("#divReport").height();
    fixTable("tableContent", 4, width, height+20);
})
/**
 *
 * @param tableID表id
 * @param fixColumnNumber冻结列数
 * @param width
 * @param height
 * @constructor
 */
function fixTable(tableID, fixColumnNumber, width, height) {
    if ($("#" + tableID + "_tableLayout").length != 0) {
        $("#" + tableID + "_tableLayout").before($("#" + tableID));
        $("#" + tableID + "_tableLayout").empty();
    }
    else {
        var lWidth = width -25;
        $("#" + tableID).after("<div id='" + tableID + "_tableLayout' style='overflow:hidden;height:" + height + "px; width:" + lWidth + "px;'></div>");
    }
    $('<div id="' + tableID + '_tableFix"></div>'
        + '<div id="' + tableID + '_tableHead"></div>'
        + '<div id="' + tableID + '_tableColumn"></div>'
        + '<div id="' + tableID + '_tableData"></div>').appendTo("#" + tableID + "_tableLayout");
    var oldtable = $("#" + tableID);
    var tableFixClone = oldtable.clone(true);
    tableFixClone.attr("id", tableID + "_tableFixClone");
    $("#" + tableID + "_tableFix").append(tableFixClone);
    var tableHeadClone = oldtable.clone(true);
    tableHeadClone.attr("id", tableID + "_tableHeadClone");
    $("#" + tableID + "_tableHead").append(tableHeadClone);
    var tableColumnClone = oldtable.clone(true);
    tableColumnClone.attr("id", tableID + "_tableColumnClone");
    $("#" + tableID + "_tableColumn").append(tableColumnClone);
    $("#" + tableID + "_tableData").append(oldtable);
    $("#" + tableID + "_tableLayout table").each(function () {
        $(this).css("margin", "0");
    });
    var HeadHeight = $("#" + tableID + "_tableHead thead").height();
    HeadHeight += 2;
    $("#" + tableID + "_tableHead").css("height", HeadHeight);
    $("#" + tableID + "_tableFix").css("height", HeadHeight);
    var ColumnsWidth = 0;
    var ColumnsNumber = 0;
    $("#" + tableID + "_tableColumn tr:last td:lt(" + fixColumnNumber + ")").each(function () {
        ColumnsWidth += $(this).outerWidth(true);
        ColumnsNumber++;
    });
    ColumnsWidth += 2;
    //if ($.browser.msie) { //这里是有关浏览器兼容问题
    //    switch ($.browser.version) {
    //        case "7.0":
    //            if (ColumnsNumber >= 3) ColumnsWidth--;
    //            break;
    //        case "8.0":
    //            if (ColumnsNumber >= 2) ColumnsWidth--;
    //            break;
    //    }
    //}
    $("#" + tableID + "_tableColumn").css("width", ColumnsWidth);
    $("#" + tableID + "_tableFix").css("width", ColumnsWidth);
    $("#" + tableID + "_tableData").scroll(function () {
        $("#" + tableID + "_tableHead").scrollLeft($("#" + tableID + "_tableData").scrollLeft());
        $("#" + tableID + "_tableColumn").scrollTop($("#" + tableID + "_tableData").scrollTop());
    });
    $("#" + tableID + "_tableFix").css({ "overflow": "hidden", "position": "relative", "z-index": "50", "background-color": "white" });
    $("#" + tableID + "_tableHead").css({ "overflow": "hidden", "width": width - 17, "position": "relative", "z-index": "45", "background-color": "white" });
    $("#" + tableID + "_tableColumn").css({ "overflow": "hidden", "height": height - 15,"position": "relative", "z-index": "40", "background-color": "white" });
    $("#" + tableID + "_tableData").css({ "overflow-x": "scroll", "overflow-y": "hidden", "width": width-ColumnsWidth-10, "height": height+2, "position": "relative", "z-index": "35","left":ColumnsWidth});
    $("#" + tableID + "_tableData").find($("#" + tableID)).css("margin-left",-ColumnsWidth);
    if ($("#" + tableID + "_tableHead").width() > $("#" + tableID + "_tableFix table").width()) {
        $("#" + tableID + "_tableHead").css("width", $("#" + tableID + "_tableFix table").width());
        $("#" + tableID + "_tableData").css("width", $("#" + tableID + "_tableFix table").width() + 17);
    }
    if ($("#" + tableID + "_tableColumn").height() > $("#" + tableID + "_tableColumn table").height()) {
        $("#" + tableID + "_tableColumn").css("height", $("#" + tableID + "_tableColumn table").height()+2);
        $("#" + tableID + "_tableData").css("height", $("#" + tableID + "_tableColumn table").height() + 19);
    }
    $("#" + tableID + "_tableFix").offset($("#" + tableID + "_tableLayout").offset());
    $("#" + tableID + "_tableHead").offset($("#" + tableID + "_tableLayout").offset());
    $("#" + tableID + "_tableColumn").offset($("#" + tableID + "_tableLayout").offset());
    var _offset = $("#" + tableID + "_tableLayout").offset();
    $("#" + tableID + "_tableData").offset({top:_offset.top});

    //  if ($("#" + tableID + "_tableData").width() > $("#" + tableID).width()) { //自适应宽
    //      $("#" + tableID + "_tableData").width($("#" + tableID + "_tableLayout").width());
    //      $("#" + tableID).width($("#" + tableID + "_tableLayout").width());
    //  }
    //  $("#" + tableID + "_tableLayout").height($("#" + tableID + "_tableData").height());//自适应高
}
上一篇下一篇

猜你喜欢

热点阅读