Vue3文本省略(Ellipsis) 效果如下图在线预览APIsEllipsis参数说明类型默认值maxWidth文本最大宽度单位pxstring | number‘100%’tooltipMaxWidth弹出提示最大宽度单位px默认为文本宽度 24string | numberundefinedline最大行数numberundefinedexpand是否启用点击文本展开全部booleanfalsetooltip是否启用文本提示框可自定义设置弹出提示内容boolean | slottrue更多属性请参考 TooltipSlots名称说明类型tooltip自定义弹出提示内容v-slot:tooltipdefault自定义展示内容v-slot:defaultEvents名称说明类型expandChange点击文本展开收起时的回调(expand: boolean) void创建文本省略组件Ellipsis.vue其中引入使用了以下组件和工具函数Vue3文字提示Tooltip监听DOM尺寸 useResizeObserverscript setup langtsimport{ref,computed,watch,onMounted}fromvueimportTooltipfromcomponents/tooltipimport{useResizeObserver}fromcomponents/utilsexportinterfaceProps{maxWidth?:string|number// 文本最大宽度单位 pxtooltipMaxWidth?:string|number// 弹出提示最大宽度单位 px默认为 文本宽度 24line?:number// 最大行数expand?:boolean// 是否启用点击文本展开全部tooltip?:boolean// 是否启用文本提示框可自定义设置弹出提示内容 boolean | slot}constpropswithDefaults(definePropsProps(),{maxWidth:100%,tooltipMaxWidth:undefined,line:undefined,expand:false,tooltip:true})consttooltipRefref()// tooltip 组件引用constobserveScrollref()// tooltip 组件暴露的 observeScroll 函数constshowTooltipref(false)// 是否显示提示框constshowExpandref(false)// 是否可以启用点击展开constexpandedref(false)// 启用点击展开时是否展开constellipsisRefref()// 文本 DOM 引用constcomputedTooltipMaxWidthref()// 计算后的弹出提示最大宽度constellipsisLineref()// 行数conststopObservationref(false)constemitdefineEmits([expandChange])consttextMaxWidthcomputed((){if(typeofprops.maxWidthnumber){return${props.maxWidth}px}returnprops.maxWidth})watch(()props.line,(to){if(to!undefined){ellipsisLine.valueto}else{ellipsisLine.valuenone}},{immediate:true})watch([()props.maxWidth,()props.line,()props.tooltip],(){updateTooltipShow()},{flush:post})useResizeObserver(ellipsisRef,(){if(stopObservation.value){setTimeout((){stopObservation.valuefalse})}else{updateTooltipShow()}})onMounted((){updateTooltipShow()observeScroll.valuetooltipRef.value.observeScroll})functionupdateTooltipShow(){constscrollWidthellipsisRef.value.scrollWidthconstscrollHeightellipsisRef.value.scrollHeightconstclientWidthellipsisRef.value.clientWidthconstclientHeightellipsisRef.value.clientHeightconstoffsetWidthellipsisRef.value.offsetWidth computedTooltipMaxWidth.value${offsetWidth24}pxif(scrollWidthclientWidth||scrollHeightclientHeight){if(props.expand){showExpand.valuetrue}if(props.tooltip){showTooltip.valuetrue}}else{if(props.expand){showExpand.valuefalse}if(props.tooltip){showTooltip.valuefalse}}}functiononExpand(){stopObservation.valuetrueif(ellipsisLine.value!none){ellipsisLine.valuenoneif(props.tooltipshowTooltip.value){expanded.valuetruetooltipRef.value.hide()}emit(expandChange,true)}else{ellipsisLine.valueprops.line??noneif(props.tooltip!showTooltip.value){expanded.valuefalseshowTooltip.valuetruetooltipRef.value.show()}emit(expandChange,false)}}functiononAnimationEnd(){if(expanded.value){showTooltip.valuefalse}}defineExpose({observeScroll})/scripttemplateTooltip reftooltipRef:stylemax-width: ${textMaxWidth}:max-widthcomputedTooltipMaxWidth:content-style{ maxWidth: textMaxWidth }:tooltip-style{ padding: 8px 12px }animationendonAnimationEndtemplate #tooltipslot v-ifshowTooltipnametooltipslot/slot/slot/templatediv refellipsisRefclassellipsis-container:class[line ? ellipsis-line : not-ellipsis-line, { ellipsis-cursor-pointer: showExpand }]:style--ellipsis-max-width: ${textMaxWidth}; --ellipsis-line: ${ellipsisLine};clickshowExpand ? onExpand() : () falseslot/slot/div/Tooltip/templatestyle langlessscoped.ellipsis-container{overflow:hidden;cursor:text;max-width:var(--ellipsis-max-width);}.ellipsis-line{display:-webkit-inline-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--ellipsis-line);}.not-ellipsis-line{display:inline-block;vertical-align:bottom;white-space:nowrap;text-overflow:ellipsis;}.ellipsis-cursor-pointer{cursor:pointer;}/style在要使用的页面引入script setup langtsimportEllipsisfrom./Ellipsis.vuefunctionexpandChange(open:boolean){console.log(open,open)}/scripttemplatedivh1{{$route.name}}{{$route.meta.title}}/h1h2classmt30 mb10基本使用/h2Ellipsis:max-width240住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪/Ellipsish2classmt30 mb10多行省略/h2Ellipsis:line2电灯熄灭 物换星移 泥牛入海br/黑暗好像 一颗巨石 按在胸口br/独脚大盗 百万富翁 摸爬滚打br/黑暗好像 一颗巨石 按在胸口/Ellipsish2classmt30 mb10点击展开/h2Ellipsis expand:line2expandChangeexpandChange电灯熄灭 物换星移 泥牛入海br/黑暗好像 一颗巨石 按在胸口br/独脚大盗 百万富翁 摸爬滚打br/黑暗好像 一颗巨石 按在胸口/Ellipsish2classmt30 mb10定制 Tooltip 内容/h2Ellipsis:max-width240住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪template #tooltipdiv styletext-align: center《秦皇岛》br/住在我心里孤独的br/孤独的海怪 痛苦之王br/开始厌倦 深海的光 停滞的海浪/div/template/Ellipsish2classmt30 mb10自定义 Tooltip 样式/h2Ellipsis:max-width240bg-color#4096ff:tooltip-style{padding:12px 16px,borderRadius:12px,fontSize:16px,backgroundColor:#4096ff}住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪/Ellipsish2classmt30 mb10自定义过渡动画时间/h2Ellipsis:max-width240:transition-duration300住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪/Ellipsish2classmt30 mb10不同的触发方式/h2SpaceEllipsis:max-width240Hover Me 住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪/EllipsisEllipsis:max-width240triggerclickClick Me 住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪/Ellipsis/Spaceh2classmt30 mb10延迟显示隐藏/h2SpaceEllipsis:max-width240:show-delay300:hide-delay300Delay 300ms 住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪/EllipsisEllipsis:max-width240:show-delay500:hide-delay500Delay 500ms 住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪/Ellipsis/Spaceh2classmt30 mb10隐藏箭头/h2Ellipsis:max-width240:arrowfalseHide Arrow 住在我心里孤独的 孤独的海怪 痛苦之王 开始厌倦 深海的光 停滞的海浪/Ellipsis/div/template

相关新闻

最新新闻

MIXRamDisk下载/注册/官网 物主锁定 激活锁 无法激活 屏幕锁工具

MIXRamDisk下载/注册/官网 物主锁定 激活锁 无法激活 屏幕锁工具

忘记iCloud的密码,是很多使用iPhone朋友经常发生的事情,平常都使用面容或者指纹解锁、安装App,久而久之,也就忘了密码,我也是一样。当然,iPhone支持重设ID密码,直接在iPhone上面就可以完成。但是…

2026/8/26 14:16:21
进程(Process)

进程(Process)

一、概念进程是操作系统资源分配的最小单元(文本段、数据段、系统数据段)进程:就是程序执行的过程,包括创建、调度和消亡,是活的程序:一段数据的集合,是死的二、常用命令ps -aux查看操作系统所有…

2026/8/26 14:16:21
systemVerilog 复习第一天——sv的仿真时间调度机制、enum、string、logic、数组、clock blocking

systemVerilog 复习第一天——sv的仿真时间调度机制、enum、string、logic、数组、clock blocking

文章目录sv的仿真时间调度机制Time literalformattimescaleEvents RegionsVerilog的赋值连续赋值过程赋值eventprocesstime-solt为什么要引入event region调度机制详解简要流程图表总结sv的一些语法特性自动推断长度支持string、real等logicstringarray定宽数组动态数组clock b…

2026/8/26 14:16:21
家庭版 Windows 安装 Docker 没有 Hyper-V 问题

家庭版 Windows 安装 Docker 没有 Hyper-V 问题

一、关联文章: 1、Docker Desktop 安装使用教程 2、安装 Windows Docker Desktop - WSL问题 3、打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题 二、问题解析 安装Docker出现问题,如下: Installation failed:one pre-requ…

2026/8/26 14:16:21
超级详细的 Ollama 搭建本地 DeepSeek大模型

超级详细的 Ollama 搭建本地 DeepSeek大模型

一、Ollama 下载与安装 Ollama 是一个开源项目,专注于帮助用户本地化运行大型语言模型(LLMs)。它提供了一个简单易用的框架,让开发者和个人用户能够在自己的设备上部署和运行 LLMs,而无需依赖云服务或外部 API。这对于…

2026/8/26 14:16:21
我在广州学 Mysql 系列之梦的开始

我在广州学 Mysql 系列之梦的开始

从今天开始我将重新梳理mysql的概念和命令详解 这里🈶️MYSQL 数据库的命令行总结!!! 文章目录数据库是什么Mysql 相关概念MySQL是什么表数据类型整型浮点型(float和double)字符串(char、varchar、_text)二进制数据(_Blob)日期时间…

2026/8/26 14:11:21