当前位置: 首页 > news >正文

网站的推广方式组合wordpress分类更改

网站的推广方式组合,wordpress分类更改,seo优化内容,公司网页网站建设 ppt模板在使用element-ui中,会发现表格组件el-table在未指定宽度情况下,会自动计算并给表格宽度赋值。但实际开发中,有时需要根据内容实际长度自动撑开显示,由内容的多少而决定表格的宽度,而不是默认宽度为100%。在默认情况下…

        在使用element-ui中,会发现表格组件el-table在未指定宽度情况下,会自动计算并给表格宽度赋值。但实际开发中,有时需要根据内容实际长度自动撑开显示,由内容的多少而决定表格的宽度,而不是默认宽度为100%。在默认情况下表格宽度为100%显示,并且列项未指定宽度情况下,剩余部分会平均分配宽度,如下图:

图1-默认情况宽度为100%

        本案例实际需求如下图所示,由内容自动撑开显示。

图2-根据内容自动撑开

一、演示页面

        首先创建Vue2项目,并新建演示页面,页面代码如下:

<template><div><el-table size="mini" border :data="tableData"><el-table-column type="index" label="序号" width="50px"></el-table-column><el-table-column label="名称" prop="name"></el-table-column><el-table-column label="内容" prop="content"></el-table-column><el-table-column label="图片" prop="thumb"><template slot-scope="scope"><div class="thumb"><img v-if="scope.row.thumb" :src="scope.row.thumb" class="img" /></div></template></el-table-column><el-table-column label="创建时间" prop="createtime"></el-table-column><el-table-column label="更新时间" prop="updatetime"></el-table-column></el-table></div>
</template><script>
import AutoTable from './autoTable'
export default {data(){return {tableData: [{name: "Angular", content: "This is Angular Javascript", thumb: require("@/assets/angular.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "VueJs", content: "This is Vue Javascript", thumb: require("@/assets/logo.png"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "NuxtJs", content: "This is Nuxt Javascript", thumb: require("@/assets/nuxtjs.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "React", content: "This is React Javascript", thumb: require("@/assets/react.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "Dog", content: "This is Dog Javascript", thumb: require("@/assets/dog.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"}]}}
}
</script><style lang="less" scoped>
.thumb{position: relative;img{ display: block; }.img{width: 30px;}.hover{display: none;width: 200px;position: absolute;left: 35px;top: 0;z-index: 1000;}&:hover{.hover{ display: block; }}
}
</style>

        以上代码创建好后,显示为“图1”中的效果。

二、样式调整

        如下图所示,element-ui中默认表格样式.cell为块级元素,为了能获取到内容真实的宽度,这里需要将其修改为行内块,这样就能获取到内容的宽度了。

        这里使用的是less预编译器,样式代码如下:

<style lang="less" scoped>
// 略.../deep/ .el-table .cell{ display: inline-block; }
/deep/ .el-table th.el-table__cell>.cell{ display: inline-block; width: auto; }
</style>

        如上图,样式内容添加后,选择元素则是按内容实际宽度区域进行显示。

三、directives中定义钩子函数

        Vue.directive构子函数对于组件中元素的改造是非常方便的,此时需要添加一个可以自动处理表格宽度的自定义指令,用于统一处理项目中需要根据内容自动撑开的表格。

        对于Vue.directive介绍之前一篇已介绍过,不清楚朋友可以前去了解一下,地址:Element-UI - 解决el-table中图片悬浮被遮挡问题_vuetable的图片放大后总是浮于文字下方-CSDN博客

        由于本人项目将表格组件进行了封装,所以这里使用局部自定义指令方法,如需全局处理可以将其功能移至全局文件中定义。

        代码如下:

export default {data(){return {tableData: [{name: "Angular", content: "This is Angular Javascript", thumb: require("@/assets/angular.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "VueJs", content: "This is Vue Javascript", thumb: require("@/assets/logo.png"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "NuxtJs", content: "This is Nuxt Javascript", thumb: require("@/assets/nuxtjs.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "React", content: "This is React Javascript", thumb: require("@/assets/react.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "Dog", content: "This is Dog Javascript", thumb: require("@/assets/dog.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"}]}},directives: {// 自定义v-autotableautotable: {inserted: (el, binding) =>  {}}},
}

        注意:自定义指令中inserted钩子函数是在被绑定元素插入父节点时调用,只执行一次。

四、定义AutoTable类

        定义AutoTable类,用于获取每列内容的实际宽度,并通过获取每列中最大的内容宽度计算出表格的宽。
       代码如下:

/*** 定义类 - 自定义表格宽度*/
class AutoTable{constructor(){this.timerHandle = null;        //计时器手柄}// 开始重新计算表格宽度start(el, binding){}
}
export default AutoTable;

        本类计时器是用于延迟获取内容部分DOM,当内容读取到后通过或满足某些条件后,通过this.timerHandle进行清除计时器。

五、修改表格宽度

        如下图可见,element-ui中的表格组件,是分头部标题部分和内容部分。所以要分两部分获取,先获取头部对应列内容的宽度,再获取内容部分的列中所有内容的宽度,合并到一个数组中,筛选出每列中的最大宽度作为列宽。

        下面实现原理和逻辑就不作细说了,每行代码都已添加备注并说明作用,大家可以慢慢细品。代码如下:

/*** 定义类 - 修正表格宽度*/
class AutoTable{constructor(){this.timerHandle = null;        //计时器手柄}// 开始重新计算表格宽度start(el, binding){// 如果值为false, 则不进行计算处理if(!binding.value) return;const headerDOM = el.querySelector('.el-table__header-wrapper'),      // 头部DOMbodyDOM = el.querySelector('.el-table__body-wrapper');          // 内容DOM// 先清除旧计时器clearInterval(this.timerHandle);// 开始计时this.timerHandle = setInterval(() => {const tds = bodyDOM.querySelectorAll('table tbody tr'),             // 获取内容行数ths = headerDOM.querySelectorAll('table thead th .cell'),       // 获取头部列元素emptyDOM = el.querySelector('.el-table__empty-text');         // 获取空DOM节点// 如果满足条件,结束计时器if(null != emptyDOM || tds.length>0) {clearInterval(this.timerHandle);}if(tds.length == 0 && ths.length == 0)  return;// 定义变量 存储每列的宽度数据const widths = [];            // 二维数组,存储行和列数据// 获取标题中的单元格宽度ths.forEach((item, i) => widths[i] = [item.offsetWidth]);// 获取内容部分列的单元格宽度tds.forEach(trEle => {const cells = trEle.querySelectorAll('td .cell');cells.forEach((item, i) => widths[i].push(item.offsetWidth))});// 定义存储每列中最大值宽度数组const maxWidth = [];// 获取每列中宽度最大值内容widths.forEach((arr, i) => maxWidth[i] = arr.reduce((maxValue, item) => Math.max(maxValue, item), arr[0]));// 定义变量存储表格宽度(追加内填充10)const realWidth = maxWidth.reduce((total, value) => total + value, 0) + (maxWidth.length * 10);// 修改表格宽度if(realWidth>0) el.style.width = realWidth + 'px';}, 50);}
}export default AutoTable;

        页面中在el-table标签上添加v-autotable,并且引入autotable.js文件,在组件注册插入时,实例类对象并执行start()函数,代码如下:

<template><div><el-table size="mini" border :data="tableData"  v-autotable="true"><el-table-column type="index" label="序号" width="50px"></el-table-column><el-table-column label="名称" prop="name"></el-table-column><el-table-column label="内容" prop="content"></el-table-column><el-table-column label="图片" prop="thumb"><template slot-scope="scope"><div class="thumb"><img v-if="scope.row.thumb" :src="scope.row.thumb" class="img" /></div></template></el-table-column><el-table-column label="创建时间" prop="createtime"></el-table-column><el-table-column label="更新时间" prop="updatetime"></el-table-column></el-table></div>
</template><script>
import AutoTable from './autoTable'
export default {data(){return {tableData: [{name: "Angular", content: "This is Angular Javascript", thumb: require("@/assets/angular.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "VueJs", content: "This is Vue Javascript", thumb: require("@/assets/logo.png"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "NuxtJs", content: "This is Nuxt Javascript", thumb: require("@/assets/nuxtjs.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "React", content: "This is React Javascript", thumb: require("@/assets/react.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "Dog", content: "This is Dog Javascript", thumb: require("@/assets/dog.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"}]}},directives: {// 自定义悬浮v-autotableautotable: {inserted: (el, binding) =>  new AutoTable().start(el, binding),}},
}
</script>

        此时页面效果如下图,细心朋友会发现此时未指定列宽部分的列,是等宽显示并出现换行的情况,并未按每列最大实际宽度显示,这个问题下面再细讲。

六、colgroup

        在解决列宽问题前,先来了解下colgroup。< colgroup > 元素用于设置表的特定列的样式,< colgroup > 元素应该用作列规范的容器,每个组都使用 < col> 元素指定,span 属性指定获取样式的列数,style 属性指定列的样式。

注意: < colgroup > 标记必须是一个 < table > 元素的子元素,并且应该放在任何其他表元素之前,如 < head > 、 < tr > 、 < td > 等,但是如果存在的话,应该放在 < caption > 元素之后。

        在 colgroup 中允许使用的 CSS 属性的选择非常有限,合法 CSS 属性如下:

名称描述
width设置宽度
visibility是否可见
background背景样式
border边界线

        所有其他 CSS 属性对表没有影响。

七、修整每列的宽度

        如下图可见,Element-ui组件中表格的列宽,是通过colgroup > col对每列宽进行控制的;所以要控制每列的宽度,则需要将其修正为之前获取第列内容宽最大值即可。

        代码如下:

class AutoTable{// 略...// 开始重新计算表格宽度start(el, binding){// 如果值为false, 则不进行计算处理if(!binding.value) return;const headerDOM = el.querySelector('.el-table__header-wrapper'),      // 头部DOMbodyDOM = el.querySelector('.el-table__body-wrapper');          // 内容DOM// 先清除旧计时器clearInterval(this.timerHandle);// 开始计时this.timerHandle = setInterval(() => {const tds = bodyDOM.querySelectorAll('table tbody tr'),             // 获取内容行数ths = headerDOM.querySelectorAll('table thead th .cell'),       // 获取头部列元素emptyDOM = el.querySelector('.el-table__empty-text');         // 获取空DOM节点// 略...// 修改表格宽度if(realWidth>0) el.style.width = realWidth + 'px';// 获取colgroupconst headerColGroup = headerDOM.querySelectorAll('colgroup col'),bodyColGroup = bodyDOM.querySelectorAll('colgroup col');// 修改每列宽度maxWidth.forEach((val, i) => {headerColGroup[i].style.width = val + 'px';bodyColGroup[i].style.width = val + 'px';});}, 50);}
}

        通过获取表格header中的colgroup > col 和body中的colgroup > col元素,再通过将第列中最大内容宽度赋值到对应列的col上即可。当上述代码执行后,再查看col属性则发现列的值已发生改变,如下图:

        页面效果如下图,此时第列中都以最大内容宽度显示,表格宽度根据内容长度变化而改变。

八、更新宽度

        由于inserted是在元素第一次插入时执行,只调用一次,所以当表格中数据变化,就需要使用到update和componentUpdated了。这里使用componentUpdated,它是在指令所在组件的 VNode 及其子 VNode 全部更新后调用。

        代码如下:

import AutoTable from './autoTable'
export default {data(){return {tableData: [{name: "Angular", content: "This is Angular Javascript", thumb: require("@/assets/angular.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "VueJs", content: "This is Vue Javascript", thumb: require("@/assets/logo.png"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "NuxtJs", content: "This is Nuxt Javascript", thumb: require("@/assets/nuxtjs.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "React", content: "This is React Javascript", thumb: require("@/assets/react.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"},{name: "Dog", content: "This is Dog Javascript", thumb: require("@/assets/dog.jpg"), createtime: "2024/6/15", updatetime: "2024/6/15"}]}},directives: {// 自定义悬浮v-autotableautotable: {inserted: (el, binding) =>  new AutoTable().start(el, binding),componentUpdated: (el, binding) =>  new AutoTable().start(el, binding)}},
}

        虽然此方法不是真正意义上根据内容宽度自动撑开的,但也达到了预期中的效果,希望对大家有所帮助。

http://www.yayakq.cn/news/716045/

相关文章:

  • 导航网站怎么做如何在自己电脑上做网站
  • 专门做茶叶会的音乐网站骗别人做网站
  • 做网站创业流程图沪深互动平台
  • 建网站外包公司小公司管理方法
  • 网站怎么建设与管理flash 可以做网站吗
  • 网站栏目框架wordpress安装主题后无法查看媒体
  • 网站收缩广告wordpress怎么进行页面修改
  • 一流的营销型网站建设wordpress 不检查更新
  • 湖州网站建设推广郑州市网络设计公司
  • 网站建设发展趋势鲜花网站建设策划方案书
  • 静态网站用什么做最快wordpress 数学插件
  • 上海网站建设 销售php网站虚拟机价格
  • wordpress文章查看量现在网站如何做优化
  • 电商官方网站西宁seo快速排名
  • 重庆主页网站建设在后台怎么做网站内链
  • 拖拽式网站建设费用一级消防工程师
  • 做网站添加支付功能要多少钱新湖南app客户端
  • 汽车网站建设徐州网站建设市场
  • wordpress破解插件常州关键词优化如何
  • 揭阳智能模板建站完整的网站优化放啊
  • 建最便宜的网站要多少钱wordpress多本小说
  • 爱站工具seo综合查询信誉好的集团网站建设
  • 网站做伪原创收录公司做的网站版权归谁所有
  • 淘宝店铺装修做代码的网站音乐网站用dw怎么做
  • 好的网站模板南通房产网
  • 无锡做网站哪家好怎样从用户体现提高网站的搜索引擎信任度
  • 上海医疗网站备案表wordpress安装大淘客
  • 电脑自己做网站可以吗全媒体广告投放平台
  • 泉州平台网站建设环境设计排版素材网站
  • 可以在自己的电脑上做网站吗软件网站开发平台