使用layui实现冻结窗口功能

Posted 张文琪2022

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用layui实现冻结窗口功能相关的知识,希望对你有一定的参考价值。


layui官方中提供了fixed字段,来实现冻结窗口功能,但这是通过table.render方法实现,若没有数据的话,不会直接实现这个功能。通过参考layui的代码,自己写了个实现冻结窗口的功能。其实也比较简单,就是把原Table中要冻结的列的内容放到一个新的div中,然后通过position定位即可,主要代码如下:

function addTableView()

        var td_widths = [50,60,200,200];
        var div_height = $("#div_data").height();//原Div高度
        var table_height = $("#dataTable").height();//原Table高度
        $("#showDiv").remove();

        var html = "<div id='showDiv' style='width:485px;height: "+div_height+"px;position: relative;top: -"+(dataTable)+"px;left: 0 px;'><table id='showTable' class='layui-table' style='width: 485px;'>";
        $("#dataTable tr").each(function () 
            html+= "<tr align='center' style='height: 50px;'>";
            html+= "<td align='center' width='50px'></td>"
            for(var i = 1;i<4;i++)
                html+= "<td width='"+td_widths[i]+"px'>";
                html+=$(this).children().eq(i).html();
                html+= "</td>";
            
            html+= "</tr>";
        )
        html+= "</table></div>";
        $("#div_data").append(html);
        //给展示Table中的input绑定监听事件,当展示框里的数据变化时更新到原来的Table中
        $("#showTable tr:not(:first):not(:last)").each(function () 
            $(this).find("td").eq(0).html("<input type='checkbox' lay-skin='primary'>");
            $(this).find("td").eq(2).find("input").keyup(function () 
                updateDataToWzTable($(this));
            );
            $(this).find("td").eq(3).find("input").keyup(function () 
                updateDataToWzTable($(this));
            );
        )
        updateDataToshowTable();

    
	//更新数据到展示Table
    function updateDataToshowTable()
        for(var i = 1;i<$("#wzTable tr").length-1;i++)
            $("#dataTable tr:eq("+i+") td:eq(2) input").val($("#dataTable tr:eq("+i+") td:eq(2) input").val());
            $("#dataTable tr:eq("+i+") td:eq(3) input").val($("#dataTable tr:eq("+i+") td:eq(3) input").val());
        
    
    //更新数据到实际Table
    function updateDataToWzTable(ele)
        //获取行数
        var rowIndex = $(ele).parent().parent().index();
        //获取列数
        var columnIndex = $(ele).parent().index();
        $("#dataTable tr:eq("+rowIndex+") td:eq("+columnIndex+") input").val($(ele).val());
    
    //定位展示Table
    function positionTable()
        $("#div_data").scroll(function()
            var table_height = $("#dataTable").height();
            var left=$("#div_data").scrollLeft();
            $("#showTitleDiv").css("position":"relative","top":"-"+table_height+"px","left":left,"background-color":"white","z-index":"999999");
        );
    

然后直接执行addTableView和positionTable方法即可。

以上是关于使用layui实现冻结窗口功能的主要内容,如果未能解决你的问题,请参考以下文章

excel冻结表格首行的方法是啥

在WPF中使用DataGrid如何实现行冻结的功能

python处理Excel实现自动化办公教学(数据筛选公式操作单元格拆分合并冻结窗口图表绘制等)

EXCEL表格文字填充及冻结处理

使用 SetParent 冻结父窗口

excel表中表头固定,窗口冻结,但是列太多,表不能左右拉动了~~怎样才能使表头不懂,又能左右拉动呢?