首页 > 其他分享 >按需加载tooltip

按需加载tooltip

时间:2024-06-11 15:04:20浏览次数:19  
标签:scrollWidth const tooltip textRef current offsetWidth 加载

前言:

在日常开发中,我们会遇到对一段文字如果太长,需要用省略号来表示,但是如果省略后,文字的完整内容就显示不出来了。这事,一般采用tooltip 的方式来显示完整,但是有时,可以显示完全,若还是用tooltip 来显示就有些多余了,所以如何按需显示tooltip 就显得尤为重要了,接下来,我们就一起探寻一下如何实现按需显示tooltip。

具体模块实现:

useTooltipShow.ts

 

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

// tooltip 按需显示
export const useTooltipShow = (text: string, sortType = '', more = false) => {
  const [tooltipEnable, setTooltipEnable] = useState(false);
  const textRef = useRef<HTMLSpanElement>(null);

  // tooltipEnable 判断
  useEffect(() => {
    const scrollWidth = textRef?.current?.scrollWidth ?? 0;
    const offsetWidth = textRef?.current?.offsetWidth ?? 0;
    if (scrollWidth > offsetWidth) {
      setTooltipEnable(true);
    } else {
      setTooltipEnable(false);
    }
  }, [text, sortType, more]);

  return { tooltipEnable, textRef };
};

使用方法:

import { useTooltipShow } from '../../../hooks/useTooltipShow';

const { tooltipEnable, textRef } = useTooltipShow(name);
 

方案优化,有的时候,我们对展示层所依赖的变量无法获得,所以也可以采用以下方案:

ResizeObserver 来监听对应区域的变化,从而设置tooltip



 

const resizeObserver = new ResizeObserver(entries => {
      const scrollWidth =  textRef.current?.scrollWidth ?? 0;
      const offsetWidth =  textRef.current?.offsetWidth ?? 0;
      if (scrollWidth > offsetWidth) {
        this.showTooltip = true;
      } else {
      this.showTooltip = false;
      }
    });

resizeObserver.observe(textRef.current)

标签:scrollWidth,const,tooltip,textRef,current,offsetWidth,加载
From: https://blog.csdn.net/liushuxin1221/article/details/50822163

相关文章

  • Flutter 急迫单子与懒惰单子。加载和实例化
    我了解eager和lazy单子之间的区别:eager在首次加载时实例化,而lazy则在首次使用(方法调用)时实例化。现在,为了充分理解两者的区别,我们应该知道加载是何时发生的。根据本文,加载发生在启动Dart虚拟机阶段。就在......
  • 微信小程序加载、更新和生命周期、分享、转发、获取头像、获取昵称、手机号、客服功能
    【上拉下拉加载】1后端和路飞项目的课程表相对应234-----wxml-------567<viewwx:for="{{goods}}"wx:key="index">{{item.name}}</view>8910------js-----------111213Page({14data:{15page:1,16goods:[]......
  • 脚本的动态加载
    <script>元素还可以动态生成,生成后再插入页面,从而实现脚本的动态加载。['a.js','b.js'].forEach(function(src){varscript=document.createElement('script');script.src=src;document.head.appendChild(script);});这种方法的好处是,动态生成的scri......
  • ArcGIS和ArcGIS Pro快速加载ArcGIS历史影像World Imagery Wayback
    ArcGIS在线历史影像网站WorldImagery Wayback(网址:https://livingatlas.arcgis.com/wayback/)提供了数期历史影像在线浏览服务,之前不少自媒体作者在文中宣称其能代表GoogleEarth历史影像。1、一点对比(1)同一级别下的版本覆盖面以下述区域为例,自2014年2月20日至2022年5月18......
  • 通过site 包加载egg 或者whl pcakge 包并动态调用模块方法
    以前简单说过通过sys.path进行egg文件模块的加载,实际上我们可以结合site以及.pth能力,实现灵活的加载处理,同时通过importlib进行动态加载,以下是一个简单说明加载配置通过site包,添加自定义目录,目录里边包含.pth配置目录结构.pth内容使用核心是通过site添加......
  • 类加载器
    双亲委派机制类加载器中的核心方法loadClassprotectedClass<?>loadClass(Stringname,booleanresolve)throwsClassNotFoundException{synchronized(getClassLoadingLock(name)){//First,checkiftheclasshasalreadybeenloaded......
  • C++全栈聊天项目(20) 聊天列表动态加载
    聊天列表动态加载如果要动态加载聊天列表内容,我们可以在列表的滚动区域捕获鼠标滑轮事件,并且在滚动到底部的时候我们发送一个加载聊天用户的信号boolChatUserList::eventFilter(QObject*watched,QEvent*event){//检查事件是否是鼠标悬浮进入或离开if(wat......
  • 封装el-select滚动底部加载更多
    封装el-select滚动底部加载更多vue2实现el-select下拉列表滚动加载更多数据父组件页面使用<template><LoadMoreSelectv-model="selectValue":fetchOptions="fetchStockLocationData"keyField="Cid"labelField="Code"valu......
  • 前端性能优化:提升网站加载速度的终极指南
     ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨                         ......
  • [UE 虚幻引擎] DTLoadFbx 运行时加载FBX本地模型插件说明
    本插件可以在打包后运行时动态加载FBX模型。 新建一个Actor并添加一个DTRuntimeFbxComponent。然后直接调用组件的函数LoadFile加载显示模型(注:不支持模型动画)FilePath:加载模型的绝对路径。CreateCollision:是否创建碰撞体。本组件是继承于UProceduralMeshC......