fastadmin框架后台列表固定第一行列表固定头部

在列表中,如果列表字段很多,并且每页数量很多,往下拉的时候就不好辨别数据是哪个字段的,对用户造成不好的浏览体验。

通过以下方法,可以实现将列表的第一行,也就是头部,固定在第一行显示,这样就能轻松辨别每个数据对应是哪个字段的,增加用户的使用体验。

打开项目的 public/assets/js/require-table.js 文件,在如下位置添加代码:

define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table', 'bootstrap-table-lang', 'bootstrap-table-export', 'bootstrap-table-commonsearch', 'bootstrap-table-template', 'bootstrap-table-jumpto', 'bootstrap-table-fixed-columns'], function ($, undefined, Moment) {var Table = {......api: {......// 固定列表头部(固定列表第一行)fixedheader: function ($table) {var $sourceTableHead = $table.find('thead tr');var $tableContainer = $table.parents('.fixed-table-container');// 固定表头 htmlvar 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)+"px",'height':tempHeight+"px"})});}setFixedColsWidth()setInterval(setFixedColsWidth, 1500);// 窗口滚动监听,设置固定表头位置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'} else {// 隐藏表头header.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);}});}},};return Table;
});

即以下方法为新增的固定列表第一行的代码,这段代码中,我们首先获取表头和表格容器的 jQuery 对象,然后使用字符串模板创建了一个固定表头的 HTML 结构,接着设置了一些样式,如背景色、文本溢出处理和宽度等属性。

我们将创建的固定表头插入到表格容器中,并通过 setInterval 定时调用 setFixedWidth() 和 setFixedColsWidth() 方法来同步表头和表格的宽度和列宽。

在窗口滚动时,我们使用事件监听来实现表头的固定和隐藏,并使用滚动条的 scroll 事件来同步表格和固定表头的滚动位置。

此外,我们还处理了固定表头全选按钮的事件,当固定表头的全选按钮被选中时,表格中的所有复选框也被选中。

// 固定列表头部(固定列表第一行)
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)+"px",'height':tempHeight+"px"})});
}
setFixedColsWidth()
setInterval(setFixedColsWidth, 1500);// 窗口滚动监听,设置固定表头位置
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'} else {// 隐藏表头header.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);}
});
}

当我们需要固定表头时调用 fixedheader 方法即可:

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

 还需要一键压缩打包前台和后台的JS:

php think min -m all -r js

至此,在列表中往下滚动鼠标时,列表头部则会一直固定在第一行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14-62 剑和诗人36 - 混合专家 (MoE) 扩展 AI 视野

了解混合专家 (MoE) 混合专家 (MoE) 是一种机器学习技术&#xff0c;它将多个“专家”神经网络模型组合成一个更大的模型。MoE 的目标是通过组合专业专家&#xff08;每个专家专注于不同的子领域&#xff09;来提高 AI 系统的准确性和能力。 MoE 模型的一些关键特征&#xff1…

探索Kotlin:从K1到K2

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 嘿&#xff0c;小伙伴们&#xff01;今天我们来聊聊Kotlin&#xff0c;这个在安卓开发圈里越来越火的编程语言。…

苹果手机抹机(马来西亚)操作步骤

苹果手机抹机&#xff08;马来西亚&#xff09;操作步骤 操作环境操作步骤 操作环境 苹果6s&#xff0c;没有插卡&#xff0c;就连接上了一个wifi 操作步骤

错位情缘悬疑升级

✨&#x1f525;【错位情缘&#xff0c;悬疑升级&#xff01;关芝芝与黄牡丹的惊世婚约】&#x1f525;✨在这个迷雾重重的剧场&#xff0c;一场前所未有的错位大戏正悄然上演&#xff01;&#x1f440; 你没看错&#xff0c;昔日兄弟的前女友关芝芝&#xff0c;竟摇身一变成了…

FastAPI 学习之路(三十七)元数据和文档 URL

实现前的效果 那么如何实现呢&#xff0c;第一种方式如下&#xff1a; from routers.items import item_router from routers.users import user_router""" 自定义FastApi应用中的元数据配置Title&#xff1a;在 OpenAPI 和自动 API 文档用户界面中作为 API 的…

【SGX系列教程】(五)enclave多线程测试,以及EPC内存测试

文章目录 一. 概述二. 原理分析2.1 多线程在Enclave中的实现流程2.2 多线程和EPC内存分配之间的冲突2.3 解决多线程和EPC内存分配冲突的策略 三. 源码分析3.1 代码结构3.2 源码3.2.1 App文件夹3.2.2 Enclave文件夹3.2.3 Makefile 3.3 总结 四.感谢支持 一. 概述 在Intel SGX环境…

从零开始学习嵌入式----C语言框架梳理与后期规划

目录 一、环境搭建. 二、见解 三、C语言框架梳理 四、嵌入式学习规划流程图&#xff08;学习顺序可能有变&#xff09; 一、环境搭建. C语言是一门编程语言&#xff0c;在学习的时候要准备好环境。我个人比较喜欢用VS,具体怎么安装请百度。学习C语言的时候&#xff0c;切忌…

树莓派pico入坑笔记,ssd1306使用

目录 说明 后附进阶玩法&#xff1a;显示中文&#xff0c;外加简单库实现 官方模块使用 使用样例 方法说明 下面是绘图支持的方法 进阶玩法&#xff0c;显示中文 方法&#xff0c;对汉字取字模&#xff0c;然后按像素对字模进行显示 说明 circuitpython8.x使用iic接口驱…

类和对象——【运算符重载】

P. S.&#xff1a;以下代码均在VS2019环境下测试&#xff0c;不代表所有编译器均可通过。 P. S.&#xff1a;测试代码均未展示头文件iostream的声明&#xff0c;使用时请自行添加。 博主主页&#xff1a;Yan. yan.                        …

宏任务与微任务对比【前端异步】

目录 简介微任务与宏任务的基本概念宏任务&#xff08;Macrotasks&#xff09;微任务&#xff08;Microtasks&#xff09;宏任务示例微任务示例微任务与宏任务的执行时序 结论 简介 在JavaScript的异步编程中&#xff0c;理解事件循环&#xff08;Event Loop&#xff09;是至关…

Qt+MySQL实现社团管理系统

开发环境 ● Qt 5.14.1 ● Win10 ● Mysql 5.7.28 系统介绍 系统主要实现的功能如下图所示 社团管理系统主要包含了以下几个亮点功能 轮播图显示社团信息支持excel形式的导入导出学生信息权限控制&#xff08;管理员、超级管理员、用户&#xff09; 系统效果展示 登录界面…

前端工程化(01):Webpack、Gulp、Grunt三大自动化构建工具对比

10年前端开发和UI设计老司机→贝格前端工场&#xff0c;为您分享。本期介绍三款自动化构建工具&#xff0c;看看他们的工作原理和差异化&#xff0c;帮助你来选择。 Webpack、Gulp和Grunt都是前端构建工具&#xff0c;用于优化前端开发流程和提高开发效率。它们都可以自动化执…

Java8新语法

一、Java8新特性 JDK 8 正式版在 2013 年 9 月份发布。 Java8主要内容Lambda表达式函数式接口方法引用与构造器引用Stream API接口中的默认方法与静态方法新时间日期API其他新特性Java8新特性简介: 速度更快代码更少(增加了新的Lambda表达式)强大的Stream API便于并行最大化减少…

构建未来对话:从零开始实现基于Vue 3的AI聊天页面

大家好&#xff0c;今天我们将一起探索如何从零开始&#xff0c;使用Vue 3构建一个AI对话页面。这个过程不仅会让我们了解Vue 3的新特性&#xff0c;还会让我们对构建交互式Web应用有一个全新的认识。如果你是编程新手&#xff0c;别担心&#xff0c;我会用通俗易懂的语言&…

HarmonyOS(43) @BuilderParam标签使用指南

BuilderParam BuilderParam使用举例定义模板定义具体实现BuilderParam初始化 demo源码参考资料 BuilderParam 该标签有的作用有点类似于设计模式中的模板模式&#xff0c;类似于指定一个UI占位符&#xff0c;具体的实现交给具体的Builder&#xff0c;顾名思义&#xff0c;可以…

SpringBoot项目架构实战之“网关zuul搭建“

第三章 网关zuul搭建 前言&#xff1a; 1、主要功能 zuul主要提供动态路由&#xff08;内置ribbon实现&#xff09;和过滤&#xff08;可以做统一鉴权过滤器、灰度发布过滤器、黑白名单IP过滤器、服务限流过滤器&#xff08;可以配合Sentinel实现&#xff09;&#xff09;功能…

学会创建虚拟网卡

此电脑-----管理 一直点击下一页 选择网络适配器 选择Microsoft----Microsoft KM-TEST环回适配器 然后点击下一页 完成的界面如下&#xff1a; 手动改IP

Git分支结构

目录 1. 线性分支结构 2. 分叉与合并结构 3. 分支与标签的关系 4. 并行开发与分支管理策略 测试&#xff08;本机系统为Rocky_linux9.4&#xff09; 合并失败解决 删除分支 删除本地分支 删除远程分支 Git 中的分支结构是版本控制中非常重要的概念之一&#xff0c;它描…

政安晨:【Keras机器学习示例演绎】(五十四)—— 使用神经决策森林进行分类

目录 导言 数据集 设置 准备数据 定义数据集元数据 为训练和验证创建 tf_data.Dataset 对象 创建模型输入 输入特征编码 深度神经决策树 深度神经决策森林 实验 1&#xff1a;训练决策树模型 实验 2&#xff1a;训练森林模型 政安晨的个人主页&#xff1a;政安晨 欢…

Python | Leetcode Python题解之第228题汇总区间

题目&#xff1a; 题解&#xff1a; class Solution:def summaryRanges(self, nums: List[int]) -> List[str]:def f(i: int, j: int) -> str:return str(nums[i]) if i j else f{nums[i]}->{nums[j]}i 0n len(nums)ans []while i < n:j iwhile j 1 < n …