Fastadmin固定表头

public/assets/js/require-table.js文件中在如下位置添加如下代码

                // 固定列表头部(固定列表第一行)
                fixedheader: function ($table) {

                var $sourceTableHead = $table.find('thead tr');
                var $tableContainer = $table.parents('.fixed-table-container');


                // 固定表头 html
                var fixed_html = `
                    <div class="fixed-table-header-mg" style="display:none;">
                        <table class="fixed_table_header"  border="0" cellpadding="4" cellspacing="0" class="table table-hover">
                            <thead></thead>
                        </table>
                    </div>
                `
                $tableContainer.prepend(fixed_html);
                var $fixedTableHeaderMg = $tableContainer.find(".fixed-table-header-mg");
                var $fixedTableHeader = $tableContainer.find('.fixed-table-header-mg .fixed_table_header')

                // 设置固定表头样式
                $tableContainer.find('.fixed-table-header-mg').css({
                    'background-color': 'white',
                    'white-space': 'nowrap',
                    'overflow-x': 'scroll',
                    'overflow-y': 'hidden',
                });
                $fixedTableHeader.css('max-width', 'inherit')

                // 设置固定头部的宽度等于表格宽度
                var setFixedWidth = function () {
                    var sourceTableWidth = $table.outerWidth();
                    $fixedTableHeaderMg.css('width', $tableContainer.outerWidth() + 'px');
                    $fixedTableHeader.css('width', sourceTableWidth + "px");
                }
                setFixedWidth()
                setInterval(setFixedWidth, 1500);

                // 复制表头
                var targetHead = $sourceTableHead.clone();
                targetHead.appendTo($fixedTableHeader.find('thead'));

                // 同步复制的表头列宽
                var setFixedColsWidth = function () {
                    $("#table thead tr th").each(function (index, value) {
                        var tempWidth = $(value).width();
                        var tempHeight = $(value).height();
                        $fixedTableHeader.find('thead th').eq(index).css({
                            'width': (tempWidth + 2) + "px",
                            'height': tempHeight + "px"
                        })
                    });
                }
                setFixedColsWidth()
                setInterval(setFixedColsWidth, 1500);

                //处理左侧锁定
                var $fixedColumnsLeft = $tableContainer.find(".fixed-columns");
                if ($fixedColumnsLeft.length) {
                    // 元素存在
                    // console.log('元素宽', $fixedColumnsLeft.outerWidth() + 'px');
                    var fixed_html_ColumnsLeft = `
                        <div class="fixed-table-header-columns-left" style="display:none;">
                        </div>
                    `
                    $tableContainer.prepend(fixed_html_ColumnsLeft);

                    var $fixedTableColumnsLeft = $tableContainer.find(".fixed-table-header-columns-left");


                    // 同步复制的表头列宽
                    var setHeaderMg_left = function () {
                        // 设置样式
                        $tableContainer.find('.fixed-table-header-columns-left').css({
                            'background-color': 'white',
                            'width': $fixedColumnsLeft.outerWidth() + 'px',
                            'top': 0,
                            'left': '30px',
                            'z-index': 9999,
                            'overflow': 'hidden',
                        });
                        $fixedTableColumnsLeft.html($fixedTableHeaderMg.html());
                    }
                    setHeaderMg_left();
                    setInterval(setHeaderMg_left, 500);
                    var header_left = $fixedTableColumnsLeft[0];

                }
                //以上处理左侧锁定

                //处理右侧锁定
                var $fixedColumnsRight = $tableContainer.find(".fixed-columns-right");
                if ($fixedColumnsRight.length) {
                    // 元素存在
                    // console.log('元素宽', $fixedColumnsRight.outerWidth() + 'px');
                    var fixed_html_ColumnsRight = `
                        <div class="fixed-table-header-columns-right" style="display:none;">
                        </div>
                    `
                    $tableContainer.prepend(fixed_html_ColumnsRight);

                    var $fixedTableColumnsRight = $tableContainer.find(".fixed-table-header-columns-right");
                    // 同步复制的表头列宽
                    var setHeaderMg_right = function () {
                        // 设置样式
                        $tableContainer.find('.fixed-table-header-columns-right').css({
                            'background-color': 'white',
                            'width': $fixedColumnsRight.outerWidth() + 'px',
                            'top': 0,
                            'right': '30px',
                            'z-index': 9999,
                            'overflow': 'hidden',

                        });
                        //复制头部到右侧容器
                        $fixedTableColumnsRight.html($fixedTableHeaderMg.html());
                        //设置容器内表格的定位
                        $tableContainer.find('.fixed-table-header-columns-right').find('table').css({
                            'margin-left': '-' + ($fixedTableHeaderMg.find('table').outerWidth() - $fixedColumnsRight.outerWidth() - 0) + 'px',
                        });
                    }
                    setHeaderMg_right();
                    setInterval(setHeaderMg_right, 500);
                    var header_right = $fixedTableColumnsRight[0];

                }
                //以上处理左侧锁定
                // 窗口滚动监听,设置固定表头位置
                const header = $fixedTableHeaderMg[0];
                const tableBody = document.querySelector('.fixed-table-body');

                window.addEventListener('scroll', () => {
                    const tableBodyRect = tableBody.getBoundingClientRect();
                    // 检查表格是否在视窗内
                    if (tableBodyRect.top < 0 && tableBodyRect.bottom > 0) {
                        // 设置表头的固定位置
                        header.style.position = 'fixed';
                        header.style.top = 0;
                        header.style.left = tableBodyRect.left + 'px';
                        header.style.display = 'block';
                        if ($fixedColumnsLeft.length) {
                            header_left.style.position = 'fixed';
                            header_left.style.display = 'block';
                        }

                        if (header_right) {
                            header_right.style.position = 'fixed';
                            header_right.style.display = 'block';
                        }


                    } else {
                        // 隐藏表头
                        header.style.display = 'none';
                        if ($fixedColumnsLeft.length) {
                            header_left.style.display = 'none';
                        }

                        if ($fixedColumnsRight.length) {
                            header_right.style.display = 'none';
                        }

                    }
                });

                // 处理表格和固定表头的横向同步滚动
                tableBody.addEventListener('scroll', function () {
                    header.scrollLeft = tableBody.scrollLeft;
                });
                header.addEventListener('scroll', function () {
                    tableBody.scrollLeft = header.scrollLeft;
                });

                // 固定表头全选按钮事件
                $fixedTableHeader.find("input[name='btSelectAll']").click(function () {
                    if ($(this).is(":checked")) {
                        $("input[name='btSelectItem']").prop("checked", "checked");
                    } else {
                        $("input[name='btSelectItem']").prop("checked", false);
                    }
                });
            }

在需要固定表头的js中如下位置引用

// 固定列表头部(固定列表第一行)
Table.api.fixedheader(table);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

withoutfear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值