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

news2024/10/7 10:15:33

效果展示
在这里插入图片描述

参数汇总

在这里插入图片描述

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

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才会生效吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ的主要组件及其功能

一、RocketMQ部署的组件 RocketMQ是啥就不多说了&#xff0c;一个基于主题的订阅发布机制的消息中间。下面就是我们部署时的架构&#xff0c;NameServer和Broker需要部署在服务器上&#xff0c;对于消费者和生产者则是我们在自己的程序里启动&#xff0c;去push/pull消息。 消…

rust变量与常量

变量绑定 在rust里有个核心原则&#xff0c;那就是所有权。在其它语言中&#xff0c;我们可以把一个值赋值给变量。但是在rust里&#xff0c;是把值绑定到变量上。任何内存对象都是有主人的&#xff0c;而且一般情况下完全属于它的主人&#xff0c;绑定就是把这块内存绑定给一…

路由器的工作原理,详细介绍

1、路由器的作用 路由器&#xff1a; router 作用&#xff1a;实现跨网段通信&#xff0c;不同的网络之间通信 交换机&#xff1a; switch 作用&#xff1a;组建局域网&#xff0c;就是将电脑通过网络连起来 交换机的原理参考文档&#xff1a;计算机网络之交换机的工作原理…

前端React项目的Next.js项目通过CSS引入自定义字体文件

最近在Web3的项目&#xff0c;需要引入自定义字体&#xff0c;做下记录&#xff1a; 1、 如果是下载的字体文件&#xff0c;直接能使用的就不需要转换&#xff0c;如果是TTF格式则需要转换成eot、svg、woff、woff2&#xff0c;这里提供一个网站Font Squirrel | Create Your Ow…

ROS之话题通信

文章目录理论模型分析流程1. 发布方2. 订阅方3.配置 CMakeLists.txt4.执行5.注意参考理论模型 话题通信实现模型是比较复杂的&#xff0c;该模型如下图所示,该模型中涉及到三个角色: ROS Master (管理者)Talker (发布者)Listener (订阅者) ROS Master 负责保管 Talker 和 Li…

简化javabean开发-->Lombok

目录 一.Lombok 1.Lombok 介绍 1.1Lombok 作用 1.2SpringBoot 和 IDEA 官方支持 2.Lombok 常用注解 3.Lombok 应用实例 3.1在 pom.xml 引入 lombok 3.2. 修改 Furn.java 3.3在 idea 安装 lombok 插件 一.Lombok 1.Lombok 介绍 1.1Lombok 作用 1. 简化 JavaBean 开…

Camtasia2023喀秋莎录屏软件下载操作教程

Camtasia软件2023最新版是一款电脑屏幕录制与视频剪辑的软件&#xff0c;功能强大且操作简单。可以使用该软件对视频进行添加滚动字幕的效果&#xff0c;并且还可以选择注释标注的样式、主题以及形状等。在内置的视频编辑器中对视频进行剪辑时还可以拖放文本、添加效果、添加过…

VTK-vtkImplicitFunction及其子类介绍

简介&#xff1a;本文主要介绍vtkImplicitFunction接口及其子类的实现原理和用途。 目录 1. vtkPlane 2. vtkPolyPlane 1. vtkPlane 描述&#xff1a;vtkPlane提供了各种平面的计算方法&#xff0c;包括点到面的投影&#xff0c;计算点到面的距离及面的法向量等。 Evaluat…

解析分布式数据库的技术框架及其在金融行业中的应用规划

早期银行业务系统处理的主要是交易型数据,数据量较少,传统关系型数据库(如Oracel、DB2等)已足够应对。随着互联网金融业务的快速发展,业务系统需要处理的数据呈爆炸式增长,传统数据库无法满足业务系统越来越高的数据处理能力要求。于是,新型的分布式数据库系统应运而生。…

Linux安装Redis 手把手教程

文章目录安装步骤1. 创建安装目录/usr/local/redis2. 进入安装包目录3. 编译环境准备&#xff1a;4. 下载redis 源码包5. 解压文件6. 进入到解压好的redis-5.0.2目录下&#xff0c;进行编译与安装7. 启动并指定配置文件8. 配置允许远程连接&#xff08;选做&#xff09;9. 启动…

文献|敬畏这种情绪,居然可以让世界变得更美好

Hello&#xff0c;大家好~ 这里是壹脑云科研圈&#xff0c;我是青书~ 在介绍今天推荐的文献之前&#xff0c;要先和大家宣布一个非常棒的消息&#xff0c;我们的第二季21天情绪文献对赌营圆满结营啦~ 在本期活动里&#xff0c;各位参加的小伙伴都有属于自己的收获&#xff1…

容器基础镜像的编写及最佳实践

1 基本概念 1.1 Docker系统组成 整体Docker的系统包括以下主要组成部分,包括Dockerclient、Dockerdaemon、Docker registry、Docker镜像、Docker容器,他们之间的关系如下图: Docker架构主要分为客户端和服务端,客户端负责发起请求,服务端负责接受,解析和处理请求,图示中…

【Linux】操作题大全

目录 1.若下达 # rmdir test 命令来删除某个已存在的目录&#xff0c;但无法成功&#xff0c;请说明可能的原因 2.请用shell中的while循环输出1-100的和 两种执行bash文件的方法 3. 请用shell中的for循环输出1-100 4.请用shell中的while循环输出1-100 5.计算输入的参数1和参…

jquery中 offset()计算的偏移量 和 原生Dom计算的偏移量不一致;

目录 一、问题 二、原因及解决方法 三、总结 一、问题 1.需求&#xff1a;有一个表格&#xff0c;单元格宽度不相等&#xff0c;单元格上面覆盖着一个input输入框。想要通过相对位置计算 输入框到底在表格的第几列。 思路&#xff1a;通过循环表格第一行单元格计算左边偏移…

Twitter群推王:推特全方位营销利器

Twitter群推王是专为Twitter运营提供的一款全方位营销工具&#xff0c;可以自动发帖、自动私信、自动转发、自动关注、自动点赞、自动改资料、自动注册、数据采集等&#xff0c;解决营销中的三大难题&#xff1a;账号问题、同一Ip环境问题、批量自动化问题&#xff0c;是个人、…

【数据结构Note4】-串、数组和广义表(kmp算法详解)

串、数组和广义表 顺序表和链表分别是线性表的两种存储结构。 栈和队列是操作受限的线性表。 串、数组和广义表是内容受限的线性表。 1. 串 1.1 串的概念和结构 串&#xff08;String&#xff09;—零个或多个任意字符组成的有限序列 所谓串是内容受限的线性表。就是要求该线性…

[ 常用工具篇 ] 解决kali英文操作不方便的问题 -- kali 设置中文界面

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

iNFTnews|FTX一夜崩塌,但Web3仍前途光明

元宇宙的日子越来越不好过了。 FTX的暴雷仍在产生广泛的影响&#xff0c;以太坊的价格快跌到1000美元了&#xff0c;这与去年11月4900美元的历史新高形成鲜明对比。 不过&#xff0c;尽管市场低迷&#xff0c;创作者仍然在Web3领域找到了爱与支持&#xff0c;甚至是可持续发展…

正则表达式快速入门

目录1.正则表达式是什么&#xff0c;有什么作用2.定位符例子2.1想要搜索以“001”开头的文件2.2想要搜索以“ab”结尾的文件2.3搜索单词开头为“zh"的文件2.4搜索单词结尾为“zh"的文件2.5搜索单词中间为“zh"的文件3.限定符例子3.1 搜索以“0”开头&#xff0c…

【Call for papers】DSN-2023(CCF-B/软件工程/2022年12月7日截稿)

文章目录1.会议信息2.时间节点3.论文主题On behalf of the Organizing Committee, we extend you a warm welcome to the 53rd Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN 2023), organized by the University of Coimbra, Portugal.…