项目初期在加载数据表格的时候为了提高表格数据渲染速度,设置了默认宽度。
现需求需要加一个表格自适应的功能,触发改功能,改变列宽度,但是不重新渲染表格,不发生数据请求。
设计思路,遍历每项的所有数据,比较字节符串长度,取最大长度。再用最大长度和标题长度比较,如果标题长就去标题长度,如果字符串长,就取字符串的。
js
//表格自适应方法 function changeWidth(agstr){ var dg = $('#'+agstr); dg.datagrid("loading");//显示加载状态$$$ var fn=function(){ var opts = dg.datagrid('getColumnFields'); //获取表头所有field var data=dg.datagrid('getData');//获取数据表格请求的数据 var role = data.rows;//数据表格请求的数据,即每行的数据 for (var i = 0; i <opts.length ;i++) { //循环每一列的数据内容 var field=opts[i]; var ro_width = 0; if(field != ''){ var col = dg.datagrid('getColumnOption', field); var col_title = col.title; for(j=0;j<role.length;j++){ if(StringTolog(role[j][field])>ro_width){ ro_width = StringTolog(role[j][field]);//比较当前field列的每条数据长度,取最大值 } } if(ro_width<StringTolog(col_title)){//如果当前列数据长度小于当前列表头长度则取表头长度 ro_width =StringTolog(col_title); } var ro_length=ro_width*14+10;//14是页面字体像素大小 10是单元格左右内边距大小 $("td[field='"+field+"'] div").width(ro_length);//设置列宽样式 dg.datagrid('lockColumn',field);//禁止数据表格改变列宽※※※ } } dg.datagrid("loaded");//隐藏加载状态$$$ } setTimeout(fn,0); } //字符串的粗略换算 function StringTolog(Str){ if(Str==null){ return 0; } Str = Str.toString();//该方法将取到的数据转为String类型 Str = Str.replace(/\s+/g,'');//替换空格 //两个字节为长度1,一个字节为长度0.5,计算字符串总长度 var newStr = (Str.length-Str.replace(/[\x00-\xff]+/g,'').length)/2 +Str.replace(/[\x00-\xff]+/g,'').length; return newStr; }
调用以上两个方法就可以实现列宽自适应。
但是发现执行此方法之后,表头和表身的单元格宽度都已经固定写死,如果此时触发调整列宽大小事件,只能改变表头宽度,不会改变表身列宽,所以自适应列宽后可以取消改变列宽大小的功能
封装冻结列方法:
//冻结列,禁止调节列尺寸$("#id").datagrid('lockColumn',field值); $.extend($.fn.datagrid.methods, { lockColumn: function(jq, field){ return jq.each(function(){ var p = $(this).datagrid('getPanel'); // 获取数据表格面板 var cell = p.find('div.datagrid-header td[field=' + field + '] > div.datagrid-cell'); // 获取数据表格监听改变列宽事件的节点 cell.resizable({disabled:true}); // 禁止改变列宽 }); } });
在给每列设置宽度的时候调用该方法
dg.datagrid('lockColumn',field);
changeWidth 方法中的※※※位置
在重新定义列宽的时候如果数据量过大会导致页面卡顿,可以再触发该方法的开始位置调用datagrid的loading方法,结束时调用loaded方法,changeWidth 方法中的$$$位置
因为在触发表格自适应方法后调用了datagrid的冻结列方法,所以再重新查询数据的时候表头不会重新渲染,只有表身会,,表身就会恢复默认宽度,就会出现表头和表身对不齐的问题,表头也不能改变宽度。
解决办法,在数据表格数据加载成功时取消冻结列,清空之前计算的列宽
封装取消冻结列方法
//取消冻结列,允许调节列尺寸$("#id").datagrid('unlockColumn',field值); $.extend($.fn.datagrid.methods, { unlockColumn: function(jq, field){ return jq.each(function(){ var p = $(this).datagrid('getPanel'); // 获取数据表格面板 var cell = p.find('div.datagrid-header td[field=' + field + '] > div.datagrid-cell'); // 获取数据表格监听改变列宽事件的节点 cell.resizable({disabled:false}); // 允许改变列宽 }); } });
数据加载成功触发
onLoadSuccess: function (data) { var opts = $(this).datagrid('getColumnFields'); //获取表头所有field for(var i=0;i<opts.length;i++){ $(this).datagrid('unlockColumn',opts[i]);//允许调整列尺寸 $("tr.datagrid-header-row td[field='"+opts[i]+"'] div").width('');//清空表格自适应时计算的表头宽度 } },
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]