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

怎么做二次元网站源码网站开发模板word

怎么做二次元网站源码,网站开发模板word,pc端和手机端网站建设,制作网站联系方式由于table组件本身并不支持宽度自适应,但实际项目需要,而且多处有用到table组件,所以尝试着自己来二次封装一下组件 想法 刚开始的想法很简单,就是获取每一列中数据和标题在表格中的长度,然后将当中最大的长度作为该列…

由于table组件本身并不支持宽度自适应,但实际项目需要,而且多处有用到table组件,所以尝试着自己来二次封装一下组件

想法

刚开始的想法很简单,就是获取每一列中数据和标题在表格中的长度,然后将当中最大的长度作为该列的宽度就可以了。

但是我们怎么才能知道它们在表格中的长度呢?

打开F12查看表格中的数据,我们可以发现,数据的外面包了一层span标签,而且父元素设置了padding

请添加图片描述

那我就在想,能不能自己手动创建一个span标签包裹数据,然后通过offerWidth获取宽度呢?

实践

说干就干!

// calculateColumnWidth.js文件
const getTextWidth = str => {const span = document.createElement('span')span.style.display = 'inline-block'span.style.visibility = 'hidden'span.style.fontSize = '14px'span.innerText = strdocument.body.appendChild(span)const width = span.offsetWidthdocument.body.removeChild(span)return width + 36 + 15
}export const calculateColumnWidth = (columns, data) => {columns.forEach(c => {if (c.type === 'selection') returnconst arr = data.map(d => d[c.key])arr.push(c.title)// 比较某一列的所有值(包含标题名)c.width = Math.max(...arr.map(d => getTextWidth(d)))})
}

这里的getTextWidth函数是用来计算每个数据应有的宽度(加36是因为标签的父元素默认设置了左,右padding为18px,而这里加15是想数据不要占满整个表格,左右留有一定的空间。值得注意的是,如果没有修改table中的默认字体大小,则字体大小要保持一致)

而calculateColumnWidth函数是用来计算并设置每列的最大宽度的

请添加图片描述

尝试引入函数并使用watch来深度监听传入的data数据,如果数据有变,就会调用calculateColumnWidth函数,从而更新columns这个数组对象中的宽度。由于这个table组件如果不传data,也会展示表格(如下图),所以immediate需要设置为true,让calculateColumnWidth函数在页面一加载就执行一次

请添加图片描述

最终实现宽度自适应的效果,如下图:

无数据时:

请添加图片描述

有数据时:

请添加图片描述

总结

二次封装table组件的源代码:

<!-- 二次封装table组件 --><template><!-- 表格 --><Table v-bind="attrs" ref="childRef"><template v-for="k in Object.keys(slots)" #[k] :key="k"><slot :name="k"></slot></template></Table>
</template><script setup>
import { calculateColumnWidth } from 'utils/calculateColumnWidth'
import { defineProps, ref, useAttrs, useSlots, watch } from 'vue'const attrs = useAttrs()
const slots = useSlots()
const childRef = ref()
const { widthAuto } = defineProps({widthAuto: {type: Boolean,require: false,},
})console.log('attrs', attrs)
console.log('slots', slots)// 计算宽度,实现自适应表格内容宽度
widthAuto &&watch(() => attrs.data,() => {calculateColumnWidth(attrs.columns, attrs.data)},{ deep: true, immediate: true })const clearSelect = () => childRef.value.selectAll(false)//暴露方法
// eslint-disable-next-line no-undef
defineExpose({clearSelect,
})
</script>

父组件中使用(使用widthAuto来控制是否要宽度自适应):

请添加图片描述

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

相关文章:

  • 网站如何做聚合页面网站建设企业网站建设
  • 网站建设的风险贵州贵州省住房和城乡建设厅网站
  • 四平建设局网站绿色营销案例100例
  • 学生做兼职的网站高仿奢侈手表网站
  • 网站开发实践意义做国外订单用哪个网站
  • 龙岗网站建设费用明细flash教程网站首页
  • 网站商城微信支付接口求网址
  • 某网站网站的设计与实现集团网站方案策划书
  • 零基础网站建设教程团队拓展
  • 网站备份网站编辑器无法显示
  • 做网站需要人在看吗嵌入式开发是干啥的
  • 上饶网站设计公司医院网站可以自己做吗
  • 标准通网站建设做竞拍网站
  • 哪个网站做ic好做旅行网站多少钱
  • 卫浴洁具网站模板微商代理怎么找货源
  • 清新县城乡规划建设局网站佛山省钱网站设计哪家便宜
  • 电子商务网站建设实训报告主要内容吉林省级建设行政主管部门政务网站
  • 网站建设一般多少钱要如何选择餐饮类网站建设达到的作用
  • 马来西亚做公路投标网站wordpress 绿色主题
  • 梅陇做网站个人设计作品集
  • 外贸网站推广多少费用nodejs做的网站
  • 最好的网站推广安徽省建设工程管理信息网
  • 南通市建设局网站6电商网站建设目标分析的方法
  • 动漫网站做毕业设计简单吗网站没有备案怎么做支付
  • 企业网站用个人备案网址导航浏览器下载
  • 网站开发前端课程简单html网页制作代码
  • 宁波网站搜索引擎优化东营人事考试信息网
  • 网站开发的软件介绍oa 开发
  • 网站规划建设与管理维护课后答案h5开发软件
  • 广州市网站集约化建设专业设计网站的公司