美文网首页
table标签冻结列示例

table标签冻结列示例

作者: 纳米君 | 来源:发表于2018-08-29 23:48 被阅读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());//自适应高
}

相关文章

  • table标签冻结列示例

    来源:冻结列fixTable方法 用前端框架的话,column基本都有frozen属性。只用单纯的table,就需...

  • WPS 表格 - 冻结窗格

    先看个示例: 1、选择A列: 2、进入「视图」,点击「冻结窗格」。点击后,「冻结窗格」会变成「取消冻结」 3、查看...

  • html常见标签详解

    1.iframe 标签 2.a 标签 3.form 标签 4.input / button标签 5.table 标签示例

  • 标签2

    表格table 只有行标签 没有列标签 表单标签 input 查文档 w3c :http://www.w3scho...

  • 2017 年 4 月 4 日学习笔记

    1. html 表格 标签定义表格; 标签定义行; 标签定义每一行的若干列, 即 table data,...

  • [Vue ElementUI] Table可编辑列的一种实现

    .1 概述 1.1 功能 vue-element table的可编辑列实现,参考NG-ZORRO的demo示例,...

  • 冻结窗格

    冻结A-H列,保持横向移动时,不会变化。 1,选中冻结窗格的下一列,即I列, 2,选中视图-冻结拆分窗格 同理冻结...

  • HTML基础——表格标签

    什么是表格标签 作用:给一堆数据添加表格语义 格式 table标签表示一个表格,tr标签表示一行,td标签表示一列...

  • CSS样式自动换行(强制换行)

    这两天在解决文本自动换行的问题,table中有些列的字段文字太长了,拉宽了整体table布局,文本位于span标签...

  • MySql 使用explain分析SQL

    使用explain查询SQL的执行计划 示例: explain返回各列的含义: table:显示这一行的数据时关于...

网友评论

      本文标题:table标签冻结列示例

      本文链接:https://www.haomeiwen.com/subject/mfrqwftx.html