【vue2】文本自动省略组件,支持单行和多行省略,超出显示tooltip
代码见文末
vue3实现
最开始就用的vue3实现,如下
Vue3实现方式
vue2开发和使用文档
组件功能
TooltipText 是一个文字展示组件,具有以下功能:
- 文本显示:支持单行和多行文本显示。
- 自动判断溢出:判断文本是否溢出,根据溢出情况显示 tooltip。
- 自定义样式:可以通过
props修改文本样式和 Tooltip 样式。 - 行数限制:支持多行文本显示,超出部分通过行数限制显示省略号。
使用方法
-
引入组件 将
TooltipText注册到你的 Vue 项目中:import TooltipText from './TooltipText.vue';export default {components: {TooltipText,}, }; -
组件模板示例
<template><TooltipText:content="'这是一个演示文本。'":lineClamp="2":maxWidth="300":tooltipOptions="{placement: 'top',effect: 'light',trigger: 'hover',}":outStyle="{ color: '#333', fontSize: '16px' }"/> </template> -
传入参数
属性名 类型 默认值 说明 tooltipOptionsObject { content: 'Bottom center', placement: 'bottom', effect: 'dark', trigger: 'hover' }Tooltip 的配置选项,参考 Element UI 的配置。 outStyleObject { fontSize: '14px' }外部样式对象,用于自定义文字样式。 contentString ''显示的文本内容。 lineClampNumber 1显示的行数限制,超出部分会显示省略号。 maxWidthNumber 0Tooltip 的最大宽度(单位 px)。 -
样式自定义 可通过
tooltipOptions或outStyle自定义 Tooltip 和文字样式::tooltipOptions="{effect: 'light',placement: 'right',trigger: 'hover', }" :outStyle="{ fontSize: '18px', color: '#555' }" -
动态内容 内容变动后会自动检查溢出并更新 Tooltip 显示状态,无需额外操作。
开发细节
-
溢出检查
- 单行文本通过
scrollWidth和clientWidth比较实现。 - 多行文本通过
scrollHeight和clientHeight比较实现。
- 单行文本通过
-
计算属性
computedMaxPopWidth动态计算 Tooltip 的最大宽度,默认为文字容器宽度的 50%。computedIfWrap判断是否为多行文本,根据lineClamp属性动态更新。
-
监听与更新
- 使用
watch监听content的变动,在内容更新后重新计算溢出状态。
- 使用
-
样式
text-auto-nowrap:单行文本样式,自动截断显示省略号。text-auto-wrap:多行文本样式,支持行数限制。
注意事项
- 如果文本内容较长但设置了过小的
maxWidth,可能导致 Tooltip 内容显示不全。 - 若需要动态调整文本或 Tooltip 样式,请确保
props数据及时更新。
通过此组件可以轻松实现文本展示与溢出提示的功能,并满足多样化的样式需求。
<template><!-- Tooltip and text display container --><div><!-- Tooltip element from Element UI --><el-tooltipv-bind="tooltipOptions" <!-- Bind tooltip options -->:popper-class="!toolTipShow ? 'hide-tooltip tooltip-popper' : 'tooltip-popper'" <!-- Conditionally apply tooltip classes -->><!-- Tooltip content slot --><template #content><div class="tooltip-content" :style="{ maxWidth: maxWidth || computedMaxPopWidth + 'px' }" <!-- Set maximum width for tooltip content -->>{{ content }} <!-- Display tooltip content --></div></template><!-- Text display with optional line clamp and styles --><div:class="{ 'text-auto-wrap': computedIfWrap, 'text-auto-nowrap': !computedIfWrap }" <!-- Apply wrapping styles based on computed value -->ref="textAutoRef" <!-- Reference for DOM access -->:style="{'-webkit-line-clamp': lineClamp, <!-- Apply line clamp for text -->'line-clamp': lineClamp, <!-- Apply line clamp for text -->...outStyle <!-- Merge additional styles -->}">{{ content }} <!-- Display main text content --></div></el-tooltip></div>
</template><script>
export default {name: 'TooltipText',props: {// Tooltip options passed to Element UI el-tooltiptooltipOptions: {type: Object,default: () => ({content: 'Bottom center',placement: 'bottom',effect: 'dark',trigger: 'hover',}),},// Additional styles for the text containeroutStyle: {type: Object,default: () => ({fontSize: '14px',}),},// Text content to displaycontent: {type: String,default: '',},// Number of lines to clamp text tolineClamp: {type: Number,default: 1,},// Maximum width for tooltip contentmaxWidth: {type: Number,default: 0,},},data() {return {toolTipShow: false, // Whether to show the tooltiptextAutoRef: null, // Reference to the text container element};},computed: {// Compute the maximum width for the tooltip dynamicallycomputedMaxPopWidth() {if (this.$refs.textAutoRef) {return this.$refs.textAutoRef.clientWidth * 0.5; // Tooltip width is half of the text container width}return '100%'; // Default to full width if reference is not available},// Determine if text wrapping should be applied based on lineClampcomputedIfWrap() {return this.lineClamp > 1;},},watch: {// Watch for changes in content and re-check overflowcontent: {handler() {this.$nextTick(() => {this.checkOverflow();});},immediate: true,},},methods: {// Check if the text content overflows its containercheckOverflow() {if (!this.$refs.textAutoRef) return;if (!this.computedIfWrap) {// Single-line text overflow checkthis.toolTipShow = this.$refs.textAutoRef.scrollWidth > this.$refs.textAutoRef.clientWidth;} else {// Multi-line text overflow checkthis.toolTipShow = this.$refs.textAutoRef.scrollHeight > this.$refs.textAutoRef.clientHeight;}},},mounted() {// Perform overflow check after component is mountedthis.$nextTick(this.checkOverflow);},
};
</script><style lang="scss" scoped>.text-auto-nowrap {width: 100%;white-space: nowrap; <!-- Prevent text wrapping -->overflow: hidden; <!-- Hide overflowing text -->text-overflow: ellipsis; <!-- Show ellipsis for overflow -->text-align: left; <!-- Align text to the left -->}.text-auto-wrap {width: 100%;text-align: left; <!-- Align text to the left -->overflow: hidden; <!-- Hide overflowing text -->text-overflow: ellipsis; <!-- Show ellipsis for overflow -->display: -webkit-box; <!-- Use a flex container for wrapping -->-webkit-box-orient: vertical; <!-- Set vertical orientation for line clamp -->}
</style><style>.hide-tooltip {visibility: hidden !important; <!-- Hide the tooltip completely -->}
</style>
相关文章:
【vue2】文本自动省略组件,支持单行和多行省略,超出显示tooltip
代码见文末 vue3实现 最开始就用的vue3实现,如下 Vue3实现方式 vue2开发和使用文档 组件功能 TooltipText 是一个文字展示组件,具有以下功能: 文本显示:支持单行和多行文本显示。自动判断溢出:判断文本是否溢出…...
网络安全产品之认识防病毒软件
随着计算机技术的不断发展,防病毒软件已成为企业和个人计算机系统中不可或缺的一部分。防病毒软件是网络安全产品中的一种,主要用于检测、清除计算机病毒,以及预防病毒的传播。本文我们一起来认识一下防病毒软件。 一、什么是计算机病毒 计算…...
游戏引擎学习第42天
仓库: https://gitee.com/mrxiao_com/2d_game 简介 目前我们正在研究的内容是如何构建一个基本的游戏引擎。我们将深入了解游戏开发的每一个环节,从最基础的技术实现到高级的游戏编程。 角色移动代码 我们主要讨论的是角色的移动代码。我一直希望能够使用一些基…...
区块链智能合约( solidity) 安全编程
引言:本文由天玄链开源开发者提供,欢迎报名公益天玄链训练营 https://blockchain.163.com/trainingCamp 一、重入和竞态 重入和竞态在solidity 编程安全中会多次提及,历史上也造成了重大的损失。 1.1 问题分析 竞态的描述不严格…...
GUNS搭建
一、准备工作 源码下载: 链接: https://pan.baidu.com/s/1bJZzAzGJRt-NxtIQ82KlBw 提取码: criq 官方文档 二、导入代码 1、导入后端IDE 导入完成需要,需要修改yml文件中的数据库配置,改成自己的。 2、导入前端IDE 我是用npm安装的yarn npm…...
【ETCD】【源码阅读】stepWithWaitOption方法解析
在分布式系统中,ETCD 作为一个强一致性、高可用的 key-value 存储系统,广泛应用于服务发现、配置管理等场景。ETCD 在内部采用了 Raft 协议来保证集群的一致性,而日志预提案(log proposal)是 Raft 协议中至关重要的一部…...
redis 怎么样查看list
在 Redis 中,可以通过以下方法查看列表的内容或属性: 1. 查看列表中的所有元素 使用 LRANGE 命令: LRANGE key start endkey 是列表的名称。start 是起始索引,0 表示第一个元素。end 是结束索引,-1 表示最后一个元素…...
E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?
我们在使用Ubuntu系统时经常性使用sudo apt install命令安装所需要的软件库,偶尔会出现如下问题: E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其…...
创建型设计模式
一、设计模式介绍 1.设计模式是什么 设计模式是指在软件开发中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案; 2.设计模式怎么来的? 满足设计原则后,慢慢迭代出来的。 3.设…...
仿iOS日历、飞书日历、Google日历的日模式
仿iOS日历、飞书日历、Google日历的日模式,24H内事件可自由上下拖动、自由拉伸。 以下是效果图: 具体实现比较简单,代码如下: import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…...
vuedraggable
官方文档:https://www.npmjs.com/package/vuedraggable 中文文档:http://www.itxst.com/vue-draggable/tutorial.html 案例下载地址: https://github.com/SortableJS/Vue.Draggable.git vuedraggablehttps://sortablejs.github.io/Vue.Dr…...
新手从事直播软件源码开发搭建经验与技巧
如果从YY或六间房的PC秀场直播间系统软件算起,直播软件已经在国内风云了至少10年了,站在用户角度提到直播系统大家基本都知道核心功能有开直播刷礼物等,那么如果站在直播软件源码开发搭建的技术角度去看呢?是不是要从需求调研分析…...
相机不动,机构动作----Hands Eyes
最近在研究 手眼标定,发现大家都需付费,搞啥子,说好的开源。。。 以相机在上固定不动,机械手为 EPSON_Robot 为例,详细的一步一步实例操作指引 EPSON_Robot 的192.168.0.1 2004 Server 详细操作步骤 1. 启动程序 运…...
Scala的导入
//导入 //(1) 创建包:在src上右键,新建软件包 //(2)填写包名:小写 //(3)在包上右键,创建类。自动加入包名 //(4)导入。import 包名.类名 //导入多个类 //import jh.yuanlixueyuan.bigdata.scala03.{A,B,C} //导入包下的所有的类 /…...
vue2中父子组件传值案例总结
在 Vue 2 中,父子组件之间的传值是通过 props 和事件来实现的。下面是详细的解释和总结: 1. 父组件向子组件传值 父组件可以通过 props 向子组件传递数据。以下是一个简单的示例: 父组件 (Parent.vue) <template><div><h1…...
功能篇:springboot中实现文件导出
### Spring Boot 中实现文件导出功能 #### 概述 在现代Web应用程序中,文件导出是一个常见的需求,允许用户将数据以特定格式(如CSV、Excel、PDF等)下载到本地。本文将详细介绍如何使用Spring Boot实现文件导出功能,并…...
Redis客户端(Jedis、RedisTemplate、Redisson)
1. 简介 Redis作为一个当下很火热的非关系型数据库,Java从业人员基本都离不开对Redis的使用。在Java程序中该数据库,需要借助于市面上的开源客户端,如Jedis、Spring Data Redis、Redisson,它们可以作为操作Redis非关系型数据库的桥…...
Mybatis中SQL的执行过程
文章目录 Mybatis 框架SQL执行过程数据库操作映射方式SQL的执行过程- SQL解析- SQL参数映射- SQL预编译- SQL执行- 结果映射- 事务处理- 缓存处理- 日志记录与监控 扩展#与$的区别- $ 符号- # 符号总结示例 Mybatis SQL分类- 动态 SQL- 静态 SQL静态SQL和动态SQL选择${}、#{}与…...
【数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:编写一个程序实现顺序栈的基本运算。 相关知识 为了完成本关任务,你需要掌握: 初始化栈、销毁栈、判断栈是否为空、进栈、出栈、取…...
【论文阅读】PRIS: Practical robust invertible network for image steganography
内容简介 论文标题:PRIS: Practical robust invertible network for image steganography 作者:Hang Yang, Yitian Xu∗, Xuhua Liu∗, Xiaodong Ma∗ 发表时间:2024年4月11日 Engineering Applications of Artificial Intelligence 关键…...
用桌面CNC制作乐高兼容木制积木:从Fusion 360设计到精密加工全流程
1. 项目概述:当数字制造遇见经典玩具作为一名玩了十多年CNC的爱好者,我一直在寻找那些能将技术、创意和实用性完美结合的项目。最近,我成功地将工作室角落里的一块硬木废料,变成了一套可以严丝合缝地拼搭在标准乐高积木上的木制建…...
别光抄答案!用Python函数通关Educoder计算思维训练,我总结了这3个实战技巧
用Python函数通关Educoder计算思维训练的3个实战技巧 当你在Educoder平台面对Python函数题目时,是否曾陷入"看懂答案却不会独立解题"的困境?本文将从计算思维的本质出发,分享三个突破函数学习瓶颈的实战技巧。不同于直接提供参考答…...
2026女性入局IT:这10张证书最吃香
一、引言:数字化转型背景下的IT职业性别结构变迁根据Gartner 2025年度全球数字化劳动力报告显示,女性在IT领域的参与度正从传统的“软件开发与测试”向“数据驱动决策”、“产品与项目管理”以及“用户体验设计”迁移。这一结构性变化主要归因于企业对数…...
Go语言集成Ollama本地大模型:gollama库实战指南
1. 项目概述:当Go语言遇上本地大模型如果你是一名Go语言开发者,同时又对本地运行的大型语言模型(LLM)感兴趣,那么你很可能已经感受到了两者之间的“次元壁”。一方面,Go以其简洁、高效和强大的并发能力&…...
避开这3个坑,你的MAX30102心率数据才准确(Arduino实测经验)
避开这3个坑,你的MAX30102心率数据才准确(Arduino实测经验) 在可穿戴设备和健康监测领域,MAX30102传感器因其集成度高、体积小巧而广受欢迎。但许多开发者在使用过程中常遇到数据不稳定、读数漂移等问题。本文将基于实际项目经验&…...
3步完成NCM转MP3:网易云音乐格式转换终极指南
3步完成NCM转MP3:网易云音乐格式转换终极指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾为网易云音乐下载的NCM格式文件无法在其他设备播放而烦恼?这款开源NCMDump工具为你提供完美的解决方案&a…...
基于MCP协议的Claude对话历史管理工具:架构、配置与实战
1. 项目概述:一个为Claude桌面应用量身定制的历史记录管理工具如果你和我一样,是Claude桌面应用的深度用户,那你一定对那个内置的对话历史管理功能颇有微词。它太基础了,基础到几乎只能算是一个“查看器”。想按日期、按项目、按关…...
模型服务化部署:用vLLM/Ollama搭建高并发API,支持流式输出与多轮对话
系列导读 你现在看到的是《本地大模型私有化部署与优化:从入门到生产级实战》的第 3/10 篇,当前这篇会重点解决:让你的本地模型像ChatGPT一样提供稳定API,支持真实业务场景的并发请求。 上一篇回顾:第 2 篇《模型下载与转换实战:从HuggingFace到GGUF/SafeTensors,格式…...
怎样免费去掉图片水印?2026年免费去水印工具推荐|在线vs软件对比
在日常工作和生活中,我们经常会遇到带有水印的图片。无论是来自社交媒体平台、在线图库还是其他来源,这些水印往往影响图片的使用效果。2026年,市面上出现了多种免费去水印工具,它们采用不同的技术方案,适用于不同的使…...
如何快速掌握Spinning Up超参数调优:提升深度强化学习性能的终极指南
如何快速掌握Spinning Up超参数调优:提升深度强化学习性能的终极指南 【免费下载链接】spinningup An educational resource to help anyone learn deep reinforcement learning. 项目地址: https://gitcode.com/gh_mirrors/sp/spinningup Spinning Up是一款…...
