当前位置:   article > 正文

vue中实现当文本超长时,中间显示省略点,两端文字显示_vue3 js如何实现当文本内容过长时,中间显示省略号...,两端正常展示

vue3 js如何实现当文本内容过长时,中间显示省略号...,两端正常展示

最近做一个资源共享的需求,要求将资源名称,共享目标人的工号一定要显示出来,也就是文本超长,显示省略点,但是如果使用css,文本超长省略号会在末尾显示,因此利用js截取来实现

  1. //获取字体是为了计算文本所占用的宽度,必须传递一个dom节点,随便选择一个即可,因为系统的字体都是一样的
  2. mounted(){
  3. // 获取系统字体
  4. this.getFontFamily(document.getElementById('side-content'))
  5. },

将获取的字体参数使用全局变量存储起来,供计算文本宽度当成参数使用

  1. getFontFamily(elem) {
  2. this.computedStyles = window.getComputedStyle(elem)['font-family']
  3. console.log(this.computedStyles,'当前系统所用字体')
  4. },

根据文本内容获取当前截取文字所用的屏幕宽度

  1. // 获取当前文本所占用的宽度
  2. getTextWidth(text, font) {
  3. const canvas = this.getTextWidth.canvas || (this.getTextWidth.canvas = document.createElement("canvas"))
  4. const context = canvas.getContext("2d")
  5. context.font = font
  6. const metrics = context.measureText(text)
  7. return metrics.width
  8. },

核心方法,判断文本,逐步截取,当文本宽度超出设定宽度时,截取的当前文字拼接上+'...'+字符串末尾截取 就是完整文本,但是我的工号长度是不一定的,因此利用前一段文本+后一段文本==定宽,这样当工号后面长一些的时候,前面就少截取一部分内容,当工号后面的内容过长,前部分文本就多截取一些

  1. handleSubstring(arr){
  2. let _this = this
  3. arr.forEach(item=>{
  4. let str=''
  5. let newStr = item.targetPath.substring(item.targetPath.lastIndexOf("工号"),item.targetPath.length);
  6. for (let i = 0; i < item.targetPath.length; i++) {
  7. if(_this.getTextWidth(str,`normal 14px ${_this.computedStyles}`) + _this.getTextWidth(newStr,`normal 14px ${_this.computedStyles}`)>270){
  8. _this.$set(item,'newtargetPath',str+'...'+newStr)
  9. break
  10. } else {
  11. str+=item.targetPath[i]
  12. }
  13. }
  14. })
  15. console.log(arr,'处理之后的arr数据')
  16. },

最后看下成果图:

​​​​​​​

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/91695
推荐阅读
相关标签
  

闽ICP备14008679号