【js】判断文本是否溢出

这篇具有很好参考价值的文章主要介绍了【js】判断文本是否溢出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:单行文本超出显示省略号,划过该文本时使用tooltip显示全部文本。

问题:由于数据是动态的,有时会很长,有时又比较短不会超出。如果一直保持显示tooltip就很不美观。

优化:超出文本时显示tooltip,不超出则不显示。

首先要判断文本是否溢出

/**
 * 判断是否文本溢出
 * @param e 事件对象
 * @returns  返回true为未溢出  false溢出
 */
export const isBeyond = (e: any) => {
  const ev = window.event || e	// 浏览器兼容,最好写一下
  const textRange = (el: any) => {
    const textContent = el
    const targetW = textContent.getBoundingClientRect().width
    const range = document.createRange()
    range.setStart(textContent, 0)
    range.setEnd(textContent, textContent.childNodes.length)
    const rangeWidth = range.getBoundingClientRect().width
    return rangeWidth > targetW
  }
  return !textRange(ev.target)	// target可以保证当前划过的dom节点一直保持是:el-tooltip__trigger
}

使用

<el-tooltip :content="detailData?.category" :disabled="disabled">
   <span @mouseenter="handleMouse($event)">
      {{ detailData?.category }}
   </span>
</el-tooltip>
let disabled = ref(true)
const handleMouse = (e: any) => {
   disabled.value = isBeyond(e);
 };

以上是用于elementplus的,以下是2023_08_30更新用于a-tooltip的,由于a-tooltip底下没有那么多子节点,无法再用createRange去判断,用scrollWidth去拿到实际文本长度,跟clientWidth文本可视宽度作比较

export const isBeyond = (e: any) => {
	const ev = window.event || e
	const textContent = ev.target 
	const clientW = textContent.clientWidth
	const scrollW = textContent.scrollWidth
	return scrollW > clientW		// true为溢出  false为不溢出
}
<a-tooltip placement="topLeft" :visible="isOpen">
	<template #title>{{ item?.value }}</template>
    <span 
    	class="flex-1 overflow-ellipsis whitespace-nowrap overflow-hidden" 
    	@mouseenter="handleEnter($event)" 
    	@mouseleave="isOpen = false"
   	>
   		{{ item?.value }}
	</span>
</a-tooltip>
let isOpen = ref(false)
const handleEnter = (e: any) => {
	isOpen.value = isBeyond (e)
}

切记切记,判断文本溢出之前一定要使用单行文件溢出显示省略号的css,并且如果是a-tooltip,要加在a-tooltip内部要溢出隐藏的span上,不然scrollWidth和clientWidth会一直为0文章来源地址https://www.toymoban.com/news/detail-586657.html

到了这里,关于【js】判断文本是否溢出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Javascript判断时间是否处于今天、本周、当月

      Javascript判断时间戳/时间日期字符串是否处于今天、本周、当月,三个时间范围。   水平有限,可能逻辑会比较繁琐,如果有更好的方法欢迎赐教。 判断是否是今天 传参:param为时间戳(默认) / 日期时间字符串,type为timestamp / datetime 示例:  todayJudge(1669961510000)  

    2024年02月15日
    浏览(51)
  • JavaScript 判断是否为数字的几种方式

    喜欢博主的文章,欢迎关注、点赞👍、收藏⭐️、留言📝支持,谢谢大家 js判断是否为数字的方式很多: typeof 、 instanceof 、 Number.isNumber parseInt 、 parseFloat isNaN 、 isFinite Number.isNaN 、 Number.isFinite 正则表达式 终极方案 我们逐一介绍,希望能帮到大家。 typeof 判断值是不是基

    2023年04月10日
    浏览(65)
  • JS判断输入值是否为正整数,判断变量是否为数字

    这篇文章将讨论如何确定一个变量是否代表 JavaScript 中的有效数字。 1.JS中的test是原来是JS中检测字符串中是否存在的一种模式,JS输入值是否为判断正整数代码: 扩展: 附判断数字、浮点的正则表达:  ”^\\\\d+$” //非负整数(正整数 + 0) “^[0-9]*[1-9][0-9]*$” //正整数 “^(

    2024年02月06日
    浏览(80)
  • JavaScript判断变量是否为undefined的两种写法

    可以使用 typeof 操作符来判断一个变量是否为 undefined 类型 也可以使用严格相等运算符 === 来判断一个变量是否为 undefined 注意: 不要使用 == 运算符来判断一个变量是否为 undefined 因为它会在比较之前进行 类型转换 ,可能导致意外的结果。 如果要判断一个变量是否未定义(既

    2024年02月14日
    浏览(50)
  • JavaScript判断时间间隔是否连续为一天的方法

    在开发中,我们经常需要判断一个数组中的对象的时间间隔是否连续。本文将介绍一个方法,通过对数组中的对象进行排序和比较,来判断时间是否从00:00到24:00连续。 假设我们有一个数组,其中包含多个对象,每个对象都有开始时间和结束时间。我们需要判断这些时间间隔

    2024年01月18日
    浏览(68)
  • js判断是否手机模式

     

    2023年04月17日
    浏览(58)
  • js判断日期是否合法

    function isDateValid(year, month, day) {   // 创建一个Date对象,将年、月、日作为参数传入   // 注意:在JavaScript中,月份是从0开始的,所以实际月份要减1   var date = new Date(year, month - 1, day);      // 使用getFullYear()、getMonth()和getDate()方法获取日期对象的年、月、日   var validYear = dat

    2024年02月11日
    浏览(55)
  • JavaScript判断对象是否为空对象的几种方法

    目录 1、空对象对应的字符串为 \\\"{}\\\" 2、for in 3、jquery 的 isEmptyObject()方法 4、Object.getOwnPropertyNames() 5、ES6 的 Object.keys() JSON.stringify()扩展 1、第一大特性 小结 2、第二大特性 3、第三大特性 4、第四大特性 5、第五大特性 6、第六大特性 7、第七大特性 8、第八大特性 var data = {}; v

    2024年01月16日
    浏览(88)
  • JavaScript判断数组对象是否含有某个值的方法(6种)

    文章内容 文章链接 vue3 antd table表格的增删改查(一) input输入框根据搜索【后台管理系统纯前端filter过滤】 https://blog.csdn.net/XSL_HR/article/details/128072584?spm=1001.2014.3001.5501 vue3 antd table表格的增删改查(二) input输入框根据搜索【后台管理系统 请求后端接口 前后端

    2024年02月06日
    浏览(63)
  • JavaScript之判断是否整数、取余、取整、进制、位或、ES6

    使用取余运算符判断,利用任何整数都会被1整除的原理,即余数是0的特点,通过这个规则来判断是否是整数。 以上输出可以看出这个函数挺好用,但对于 字符串 和 某些特殊值 则需要完善一下检验规则,否则会被\\\"欺骗\\\",对于空字符串、字符串类型数字、布尔true、空数组都

    2024年01月19日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包