js:判断文本溢出隐藏生效text-overflow: ellipsis

简介: js:判断文本溢出隐藏生效text-overflow: ellipsis

效果展示

image.png

参数汇总

image.png

看上图,不难发现,文字有超出的条件是

target.scrollWidth > target.offsetWidth

可以通过js判断是否生效,参考element-ui的代码实现

https://github.com/ElemeFE/element/blob/dev/packages/table/src/table-body.js#L241

它多了一个判断

rangeWidth + padding > target.offsetWidth

完整代码

<template>
  <div class="">
    <h2>正常显示 border</h2>
    <div
      id="text-1"
      class="border"
    >
      水光潋滟晴方好,山色空濛雨亦奇。欲把西湖比西子,淡妆浓抹总相宜。
    </div>
    <div id="text-1-label"></div>
    <h2>设置宽度 border width--100</h2>
    <div
      id="text-2"
      class="border width--100"
    >
      水光潋滟晴方好,山色空濛雨亦奇。欲把西湖比西子,淡妆浓抹总相宜。
    </div>
    <div id="text-2-label"></div>
    <h2>设置宽度+不换行 border width--100 white-space--nowrap</h2>
    <div
      id="text-3"
      class="border width--100 white-space--nowrap"
    >
      水光潋滟晴方好,山色空濛雨亦奇。欲把西湖比西子,淡妆浓抹总相宜。
    </div>
    <div id="text-3-label"></div>
    <h2>
      设置宽度+不换行+溢出隐藏 border width--100 white-space--nowrap
      overflow--hidden
    </h2>
    <div
      id="text-4"
      class="border width--100 white-space--nowrap overflow--hidden"
    >
      水光潋滟晴方好,山色空濛雨亦奇。欲把西湖比西子,淡妆浓抹总相宜。
    </div>
    <div id="text-4-label"></div>
    <h2>
      设置宽度+不换行+溢出隐藏+溢出省略号 border width--100 white-space--nowrap
      overflow--hidden text-overflow--ellipsis
    </h2>
    <div
      id="text-5"
      class="border width--100 white-space--nowrap overflow--hidden text-overflow--ellipsis"
    >
      水光潋滟晴方好,山色空濛雨亦奇。欲把西湖比西子,淡妆浓抹总相宜。
    </div>
    <div id="text-5-label"></div>
    <h2>显示为行内块元素 border display--inline-block</h2>
    <div
      id="text-6"
      class="border display--inline-block"
    >
      水光潋滟晴方好,山色空濛雨亦奇。欲把西湖比西子,淡妆浓抹总相宜。
    </div>
    <div id="text-6-label"></div>
  </div>
</template>
<script>
export default {
  name: 'index',
  props: {},
  components: {},
  data() {
    return {}
  },
  computed: {},
  methods: {
    handleCellMouseEnter(target) {
      function getStyle(element, property = null) {
        const css = window.getComputedStyle(element, null)
        return property ? css[property] : css
      }
      // console.log(e.target)
      // let target = e.target
      const range = document.createRange()
      range.setStart(target, 0)
      range.setEnd(target, target.childNodes.length)
      // console.log(range)
      const rangeWidth = range.getBoundingClientRect().width
      const padding =
        (parseInt(getStyle(target, 'paddingLeft'), 10) || 0) +
        (parseInt(getStyle(target, 'paddingRight'), 10) || 0)
      let data = {
        rangeWidth,
        padding,
        'rangeWidth+padding': rangeWidth + padding,
        offsetWidth: target.offsetWidth,
        scrollWidth: target.scrollWidth,
      }
      document.querySelector(`#${target.id}-label`).innerText =
        JSON.stringify(data)
      if (
        rangeWidth + padding > target.offsetWidth ||
        target.scrollWidth > target.offsetWidth
      ) {
        console.log('有隐藏文字...')
      } else {
        console.log('没有隐藏文字')
      }
      return data
      // console.log(target.innerText || target.textContent)
    },
  },
  mounted() {
    let list = [...document.querySelectorAll('[id^="text"]')]
    let data = []
    for (let item of list) {
      if (item.id.endsWith('label')) {
        continue
      }
      let res = this.handleCellMouseEnter(item)
      data.push(res)
    }
    console.table(data)
  },
  created() {},
}
</script>
<style lang="less"></style>
<style lang="less" scoped>
h2 {
  margin-top: 50px;
  line-height: 1.5;
  font-weight: 500;
}
.border {
  box-sizing: border-box;
  border: 1px solid #666;
  padding: 10px;
}
.width--100 {
  width: 100px;
}
.white-space--nowrap {
  white-space: nowrap;
}
.overflow--hidden {
  overflow: hidden;
}
.text-overflow--ellipsis {
  text-overflow: ellipsis;
}
.display--inline-block {
  display: inline-block;
}
</style>

参考

你真的知道什么情况下text-overflow:ellipsis才会生效吗?

相关文章
|
6月前
|
JavaScript 前端开发 Java
java调用js实现富文本过滤
java调用js实现富文本过滤
|
1月前
|
JavaScript
js 特殊文本的判断
js 特殊文本的判断
38 0
|
4月前
|
前端开发 JavaScript
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
|
4月前
|
JavaScript 前端开发
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)
93 1
|
4月前
|
JavaScript
文本,Pinia的使用,(0 , _stores_token_js__WEBPACK_IMPORTED_MODULE_1__.useTokenStore),接口中必须用引入store.js文件
文本,Pinia的使用,(0 , _stores_token_js__WEBPACK_IMPORTED_MODULE_1__.useTokenStore),接口中必须用引入store.js文件
文本vitepress,如何设置背景图,如何插入背景图,如何插入logo,为了放背景图片,我们要新建pubilc的文件夹,插入logo要在config.js中进行配置,注意细节,在添加背景时,注意格式
文本vitepress,如何设置背景图,如何插入背景图,如何插入logo,为了放背景图片,我们要新建pubilc的文件夹,插入logo要在config.js中进行配置,注意细节,在添加背景时,注意格式
|
4月前
|
资源调度 前端开发
文本,vitepress的使用,如何使用vitevitepress没有config.js该怎么办?这里使用vitepress进行手动配置,参考只爭朝夕不負韶華的文章
文本,vitepress的使用,如何使用vitevitepress没有config.js该怎么办?这里使用vitepress进行手动配置,参考只爭朝夕不負韶華的文章
|
6月前
|
JavaScript
JS实现一键点击按钮复制文本
【5月更文挑战第6天】JS实现一键点击按钮复制文本
|
5月前
|
JavaScript 前端开发
JavaScript 计算颜色的相对亮度,并确定相应的文本颜色
JavaScript 计算颜色的相对亮度,并确定相应的文本颜色
60 0
|
6月前
编程笔记 html5&css&js 007 HTML文本:段落和格式
编程笔记 html5&css&js 007 HTML文本:段落和格式
下一篇
无影云桌面