前端检测到省略号文本自动显示Tooltip的方法技巧

 更新时间:2026年05月23日 09:59:06   作者:代码小学僧  
响应式场景下,窗口缩放会导致元素可视尺寸变化,原本未省略的文本可能被截断,原本省略的文本可能完全显示,这篇文章主要介绍了前端检测到省略号文本自动显示Tooltip的方法技巧,需要的朋友可以参考下

前言

在前端开发中,我们经常会遇到接口返回的文本内容过长,无法完全显示的问题。为了处理这一问题,通常会设置固定的宽度并使用省略号样式(text-overflow: ellipsis)来隐藏超出的文本。然而,有时产品需求还希望用户能够通过悬停查看完整内容,这时就需要引入 Tooltip 进行展示。(没被省略的时候不要显示Tooltip)

// tailwind的样式单行省略
.line-clamp-1 {  
    overflow: hidden;  
    display: -webkit-box;  
    -webkit-box-orient: vertical;  
    -webkit-line-clamp: 1;  
}

// 自行设置的css样式
single-line {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

为了解决这个问题,我们实现了一个自定义 Hook,该 Hook 会监测文本元素是否因宽度限制而被省略。一旦检测到文本内容被省略,Hook 会自动为该元素添加 Tooltip,确保用户可以方便地查看完整信息。

代码实现

use-ellipsis.ts

import { useEffect, useRef, useState } from 'react';

type Options = {
  lines?: number; // 支持多行
};

export function useEllipsis<T extends HTMLElement>({
  lines = 1,
}: Options = {}) {
  const ref = useRef<T>(null);
  const [isEllipsis, setIsEllipsis] = useState(false);

  useEffect(() => {
    const el = ref.current;
    if (!el) return;

    const check = () => {
      if (lines === 1) {
        setIsEllipsis(el.scrollWidth > el.clientWidth);
      } else {
        setIsEllipsis(el.scrollHeight > el.clientHeight);
      }
    };

    check();
    window.addEventListener('resize', check);
    return () => {
      window.removeEventListener('resize', check);
    };
  }, [lines]);

  return { ref, isEllipsis };
}

ellipsis-tooltip.tsx

import { Tooltip } from '@arco-design/web-react'; // 或 antd / 你自己的库
import { useEllipsis } from '@/hooks/use-ellipsis.ts';
import { cn } from '@/lib/utils.ts';

type EllipsisTooltipProps = {
  text: string;
  className?: string;
  onClick?: () => void;
  lines?: number;
};

export const EllipsisTooltip: React.FC<EllipsisTooltipProps> = ({
  text,
  className,
  onClick,
  lines = 1,
}) => {
  const { ref, isEllipsis } = useEllipsis<HTMLDivElement>({ lines });

  const lineClass =
    lines === 1 ? 'truncate whitespace-nowrap' : `line-clamp-${lines}`;

  const content = (
    <div ref={ref} className={cn(lineClass, className)} onClick={onClick}>
      {text}
    </div>
  );

  return (
    <Tooltip content={text} disabled={!isEllipsis} unmountOnExit={false}>
      {content}
    </Tooltip>
  );
};

使用示例与效果

export default function TestPage() {
  const mockText = '很长很长很长很长很长';
  const mockText2 = '简短的';
  return (
    <>
      <EllipsisTooltip className='w-28' text={mockText} />
      <EllipsisTooltip text={mockText2} />
    </>
  );
}

总结

到此这篇关于前端检测到省略号文本自动显示Tooltip的文章就介绍到这了,更多相关前端检测省略号文本自动显示Tooltip内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • javascript event在FF和IE的兼容传参心得(绝对好用)

    javascript event在FF和IE的兼容传参心得(绝对好用)

    event在IE和FF不兼,下面为大家分享的是javascript event在FF和IE的兼容传参心得,需要的朋友可以参考下
    2014-07-07
  • 通过一次报错详细谈谈Point事件

    通过一次报错详细谈谈Point事件

    这篇文章主要给大家介绍了关于如何通过一次报错详细谈谈Point事件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2018-05-05
  • JavaScript中的console.log()函数详细介绍

    JavaScript中的console.log()函数详细介绍

    这篇文章主要介绍了JavaScript中的console.log()函数详细介绍,本文讲解了什么是console.log()、兼容没有调试控制台的浏览器、使用参数、使用其它日志级别等内容,需要的朋友可以参考下
    2014-12-12
  • JavaScript通过this变量快速找出用户选中radio按钮的方法

    JavaScript通过this变量快速找出用户选中radio按钮的方法

    这篇文章主要介绍了JavaScript通过this变量快速找出用户选中radio按钮的方法,涉及javascript中this变量的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • 解读new Object()和Object.create()的区别

    解读new Object()和Object.create()的区别

    这篇文章主要介绍了解读new Object()和Object.create()的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 小程序和web画三角形实现解析

    小程序和web画三角形实现解析

    这篇文章主要介绍了小程序和web画三角形实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • js中opener与parent的区别详细解析

    js中opener与parent的区别详细解析

    本篇文章主要是对js中opener与parent的区别进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • JS+Canvas绘制动态时钟效果

    JS+Canvas绘制动态时钟效果

    这篇文章主要为大家详细介绍了JS+Canvas绘制动态时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 小白谈谈对JS原型链的理解

    小白谈谈对JS原型链的理解

    这篇文章主要介绍了小白谈谈对JS原型链的理解的相关资料,需要的朋友可以参考下
    2016-05-05
  • JavaScript Math对象和调试程序的方法分析

    JavaScript Math对象和调试程序的方法分析

    这篇文章主要介绍了JavaScript Math对象和调试程序的方法,结合实例形式分析了javascript中Math对象生成随机数以及使用alert()、console.log()函数进行错误调试相关操作技巧,需要的朋友可以参考下
    2019-05-05

最新评论