数据表格自动分配列宽的一种实现方法

数据表格自动分配列宽的一种实现方法

layui数据表格自动分配列宽效果图:

1.gif适用场景:
主要是解决窗口大小改变后表格尾列出现空白和滚动条的问题
-窗口由小变大,出现表格尾列出现空白

1.jpg窗口由大变小,出现横向滚动条

2.jpg重新加载框架后恢复正常

3.jpg使用前提:

-每一列的表头必须全部设置minWidth(依靠minWidth属性进行的判断)

-自己中间使用的

-页面只能有一个数据表格,多个数据表格的话需要自己修改代码(表格的判断,列数的获取等)

具体步骤:

-监听窗口大小改变事件

var resizeTimer;    $(window).resize(function () {        if (resizeTimer) {            clearTimeout(resizeTimer);        }        resizeTimer = setTimeout(function () {            resizeTimer = null;            dstributionColumnWidth();        }, 200);    });/*经过测试发现,当窗口大小改变之后,这个方法会调用多次所以需要使用clearTimeout方法取消由 setTimeout() 方法设置的 timeout也就是说每一次调用后200毫秒内的下一次调用都会取消上一次的调用这样可以大概率保证最终只执行一次如果还是不行就把200调大点比如500当然值越小,给人的感觉越流畅*/

登录后复制

获取表格的宽度、列数、求出平均列宽

// 表格宽度var tabWidth = $(".layui-table-header").width();// 列数var colNum = $("tr").eq(0).find("th").length;// 平均列宽var avgWidth = tabWidth / colNum;/*求宽度和列宽的方式比较简单,也不知道有没有通用性(水平所限),自己使用没有问题,如果大家拿不到值的话就根据自己的情况写代码拿到相应的值就行了,当然要是有更好更优雅的方法也一定要留言告诉我*/

登录后复制

获取每一列的data-field和data-minwidth属性的值并封装为对象,并按照data-minwidth的值由大到小排序

/**     * 列对象     * @param index 所在列在当前行中的索引位置(没用上可以不要)     * @param name 对应表头中设置的field     * @param minWidth 对象表头中的minWidth     * @param width 最终的宽度     * @constructor     */    function Column(index, name, minWidth, width) {        this.index = index;        this.name = name;        this.minWidth = minWidth;        this.width = width;    }// 获取参数封装对象if (cols === undefined) {            cols = $("tr").eq(0).find("th").map(function (index, item) {                var col = new Column(index, $(this).attr("data-field"), $(this).attr("data-minwidth"));                return col;            });            // 排序            cols.sort(function (a, b) {                return b["minWidth"] - a["minWidth"];            });        }/**     * 计算列宽     * @param columns column对象数组     * @param colNum 列数     * @param tabWidth 表格宽度     * @param avgWidth 平均宽度     */    function calculateColumnWidth(columns, colNum, tabWidth, avgWidth) {        // 是否显示表格横向滚动条        showOverflowX = false;        // 是否完成比较        var isComplete = false;        for (var i = 0; i  平均列宽,那么就用表格宽度减去minWidth                然后除以列数-1,重新求平均列宽                */                column["width"] = column["minWidth"];                tabWidth -= column["minWidth"];                colNum -= 1;                avgWidth = tabWidth / colNum;                // 如果最后一列时,平均列宽大于最小列宽,说明当前页面的宽度足够显示表格,就可以隐藏横向滚动条,反之则需要显示滚动条                if (i == columns.length - 1) {                    showOverflowX = true;                }            }        }    }

登录后复制

设置单元格宽度、设置滚动条

// 这里是根据名称查找相应的th、td标签,可能有更好的方法,欢迎留言for (var i = 0; i 

完成!
完整代码

var cols, showOverflowX;    /**     * 列对象     * @param index 所在列在当前行中的索引位置(没用上可以不要)     * @param name 对应表头中设置的field     * @param minWidth 对象表头中的minWidth     * @param width 最终的宽度     * @constructor     */    function Column(index, name, minWidth, width) {        this.index = index;        this.name = name;        this.minWidth = minWidth;        this.width = width;    }    /**     * 计算列宽     * @param columns column对象数组     * @param colNum 列数     * @param tabWidth 表格宽度     * @param avgWidth 平均宽度     */    function calculateColumnWidth(columns, colNum, tabWidth, avgWidth) {        showOverflowX = false;        var isComplete = false;        for (var i = 0; i 

使用方法

layui.config({    // 放到这个目录里    base: '/static/js/extend/'}).extend({formSelects: 'formSelects-v4.min'});  // 这里layui.use(['table', 'element', 'layer', 'jquery', 'form', 'formSelects', 'tools', 'autoColumnWidth'], function () {    var table = layui.table,        element = layui.element,        layer = layui.layer,        $ = layui.$,        form = layui.form,        formSelects = layui.formSelects,        tools = layui.tools,        // 这里        autoColumnWidth = layui.autoColumnWidth;

登录后复制

然后在需要的地方直接调用

autoColumnWidth.resize();

登录后复制

ps:窗口大小监听代码还是要自己写的

想要数据表格加载之后就分配列宽可以写在done的回调里

done: function () {      autoColumnWidth.resize();}

登录后复制

推荐:layui使用教程

以上就是数据表格自动分配列宽的一种实现方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3006008.html

(0)
上一篇 2025年3月13日 01:06:42
下一篇 2025年3月13日 01:06:56

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • layui table模块对表格数据处理后的排序问题

    使用layui table过程中,将某一列的数据格式进行转换,或者将0/1状态改为是/否,或者将数字改为星星评分显示的时候都会遇到一个问题,我的表格数据转换成其他形式,同时设置了sort:true,此时,点击排序按钮之后,该列数据就消失了。…

    2025年3月13日
    100
  • 采用layui的美化时保留select里面的change事件

    很多小伙伴遇到美化了之后里面的change事件不触发了这个问题,以前的建议就是既然使用layui的组件,就充分利用他,他对应的也提供了表单的select事件,但是如果这些节点以前就存在了后来用了layui岂不是都要去把对应的事件搬过来。 推…

    2025年3月13日 编程技术
    200
  • 基于layui的步骤条面板(附代码)

    layui(谐音:类UI) 是一款采用自身模块规范编写的前端UI框架,遵循原生HTML/CSS/JS的书写与组织形式,下面我们来看一下基于layui的步骤条面板实现。 html元素             条目1        条目2   …

    2025年3月13日
    200
  • LayUI第三方插件开发规范详解

    本规范一共四件事:1、规定插件的目录使用,2、规定插件css样式的前缀,3、规定插件的统一封装,4、规定插件的引入方式。 一、目录篇 先来一个目录图 目录结构说明(结合图片理解)mod_name代表插件名,author代表第三方作者 lay…

    2025年3月13日 编程技术
    200
  • Layui table组件相关介绍

    出现的问题: 1、使用 Layui 官方提供的 【转换静态表格】 方式初始化加载时报 id 找不到的错误(自己的锅) 2、传递参数问题 使用的 table 加载刷新方案 有一个页面,左侧是一个 tree,右侧是一个 table,默认 tab…

    2025年3月13日
    200
  • layui入门总结

    获得 Layui 你可以在官网首页下载到 Layui 的最新版,也可以通过 GitHub 得到Layui的开源包。目前只同步维护这两处资源渠道。一般如果你是用于实际项目,推荐你直接从官网下载。layui构建后的结构(也就是你获得的包) ├─…

    2025年3月13日
    200
  • layui复选框使用介绍

    layui复选框: 效果图 layui复选框,一个主的复选框控制多个从复选框,主复选框和从复选框的颜色不一样 layui复选框的样式,都是在选然后才会有的,所以直接通过css设置就实现不了了。只可以通过js动态设置 html代码使用了jfi…

    2025年3月13日
    200
  • layui事件监听使用

    在使用layui的form表单做验证提交的时候,如果结合vue,或者是三级联动的时候,就需要做事件监听了。 具体语法: form.on(‘event(过滤器值)’, callback); 登录后复制 可以用于监听:select,checkb…

    2025年3月13日
    200
  • 为layDate输入框加上图标的方法(附代码)

    为layDate输入框加上图标的方法: 基于layui 2.3.0-rc1 为laydate输入框加上图标,让laydate输入框更显眼 先看图片 修改的地方 修改模块css laydate.css里添加: .laydate-with-ic…

    2025年3月13日
    200
  • layui自定义字体图标图文教程

    layui的图标取自于阿里巴巴的矢量图标库 Iconfont 第一步,通过浏览器打开  http://iconfont.cn/ ,访问阿里巴巴矢量图标库。 第二步,通过右上角的用户图标,授权登陆一个账号,在此我选择使用Github作为登陆账…

    2025年3月13日 编程技术
    200

发表回复

登录后才能评论