最近在使用Layui时发现table数据表格组件的toolbar操作栏不支持自适应宽度功能,于是上网查询了一些资料,发现相关文章很少,有几篇的写法是根据列ID来进行操作的,兼容性太低,于是决定自己实现。
效果
我们先看一下table组件的默认效果:
可以看到在按钮没有全部显示的情况下,右侧预留了很多空白位置,非常不美观。
再看一下我们实现自适应宽度后的效果:
可以看到,优化后列宽为本页数据需要使用的最大宽度,在某些情况下可省去很多位置。
好,效果看完了,我们接下来看下如何实现。
实现
首先我们的toolbar操作栏需要设置一个默认的宽度(width参数),需要大于你所有按钮的宽度总和。
注意需要使用unresize: true 来禁止用户通过拖拽更改列宽
代码如下:
1
| {fixed: 'right', title: '操作', toolbar: '#actionBar', unresize: true, width: 260}
|
然后利用table组件的done函数来执行我们的自适应宽度逻辑:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| done: function (res, curr, count) { let maxWidth = 0; let fixedRight = $(".layui-table-fixed-r");
fixedRight .children(".layui-table-header") .children("table") .children("thead") .children("tr") .each(function () { $(this).children("th").children("div").removeClass(); $(this).children("th").children("div").addClass("layui-table-cell"); }); fixedRight .children(".layui-table-body") .children("table") .children("tbody") .children("tr") .each(function () { $(this).children("td").children("div").removeClass(); $(this).children("td").children("div").addClass("layui-table-cell"); maxWidth = $(this).width() - 30; });
fixedRight .children(".layui-table-header") .children("table") .children("thead") .children("tr") .each(function () { $(this).children("th").children("div").width(maxWidth); }); fixedRight .children(".layui-table-body") .children("table") .children("tbody") .children("tr") .each(function () { $(this).children("td").children("div").width(maxWidth); });
$(".layui-table-box .layui-table-header") .children("table") .children("thead") .children("tr") .each(function () { $(this).children("th:last").children("div").width(maxWidth); }); $(".layui-table-box .layui-table-main") .children("table") .children("tbody") .children("tr") .each(function () { $(this).children("td:last").children("div").width(maxWidth); }); }
|
复制上述代码至你的项目中,基本不需要任何改动即可实现操作栏自适应宽度的效果。
备注
1
| maxWidth = $(this).width() - 30;
|
其中这句代码中的 -30 是我测试后最好的一个修正值,当然,你的使用环境可能跟我的有所不同,如果需要进行一些修正,修改此值即可。
如果有更好的实现方式或该方法有任何的问题欢迎评论留言。
后记
在不同的使用环境中可能会出现一些奇怪的问题,后来的小伙伴可以查看评论区提供的解决方法。
1. 影响左边固定列的数据展示,将
1
| $(".layui-table-box .layui-table-header")
|
替换为
1
| $(".layui-table-box>.layui-table-header")
|