Vue3 + Element Plus實現表格多行文本截斷與智能Tooltip提示

在實際開發中,我們經常需要在表格中展示較長的文本內容,但又希望保持界面的整潔美觀。本文將介紹如何在Vue3 和 Element Plus中實現表格多行文本截斷,并智能控制Tooltip的顯示——只有當文本被截斷時才顯示Tooltip,否則不顯示。

需求分析

目標是打造一個用戶體驗友好的表格,對于“描述”這一列實現以下功能:

  1. 多行文本截斷:當描述文本限制為固定行數(如2行),超出行數的部分顯示為省略號
  2. 智能Tooltip: 僅當文本被截斷時顯示Tooltip,否則不顯示

技術選型與實現思路

CSS多行文本截斷
利用CSS的-webkit-line-clamp屬性可以很方便地實現多行文本截斷功能。它需要配合以下屬性一起使用:

 cursor: pointer;overflow: hidden;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 2;/* 這里設置為2行,根據需求調整*/max-height: 3em;line-height: 1.5;text-overflow: ellipsis;word-break: break-word;

Tooltip條件顯示
借助Vue的條件渲染(v-if等指令),根據文本內容是否超出兩行的判斷結果,來決定是否顯示Tooltip組件。需要通過JavaScript來計算文本所在容器的實際高度和內容高度,以此判斷是否超出兩行。

代碼實現

<script setup lang="ts">
import { ref, reactive } from 'vue'
import { ElTable, ElTableColumn, ElButton, ElDialog, ElForm, ElFormItem, ElInput,ElMessage,ElTooltip
} from 'element-plus'
import { Plus } from '@element-plus/icons-vue'interface TableItem {id: numbername: stringhobby: stringdescription: string
}// 表格數據
const tableData = ref<TableItem[]>([{ id: 1, name: '張三', hobby: '讀書', description: '喜歡閱讀各種類型的書籍,特別是文學作品和技術書籍。經常在業余時間去圖書館或書店,認為讀書是最好的放松方式。' },{ id: 2, name: '李四', hobby: '運動', description: '熱愛各種體育運動,包括跑步、游泳、籃球等。每周至少運動三次,保持良好的身體狀態和健康的生活習慣。' },{ id: 3, name: '王五', hobby: '音樂', description: '對音樂有著深厚的興趣,會彈奏鋼琴和吉他。' }
])// tooltip 狀態管理
const tooltipStates = ref<Record<number, boolean>>({})
const descriptionRefs = ref<Record<number, HTMLElement>>({})
// 設置描述文本的引用
const setDescriptionRef = (el: HTMLElement | null, id: number) => {if (el) {descriptionRefs.value[id] = el}
}// 檢查文本是否溢出
const checkTextOverflow = (id: number, text: string) => {const element = descriptionRefs.value[id]if (!element) return// 檢查是否有文本溢出const isOverflowing = element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidthtooltipStates.value[id] = isOverflowing
}</script><template><div class="static-table-container"><div class="header"><h2>用戶信息管理</h2></div><!-- 數據表格 --><el-table :data="tableData" style="width: 100%" stripeborder><el-table-column prop="id" label="ID" width="80" align="center"/><el-table-column prop="name" label="姓名" width="150"align="center"/><el-table-column prop="hobby" label="愛好" align="center"/><el-table-column prop="description" label="描述" width="300"align="left"><template #default="{ row }"><div class="description-text":ref="el => setDescriptionRef(el, row.id)"@mouseenter="checkTextOverflow(row.id, row.description)"><el-tooltipv-if="tooltipStates[row.id]":content="row.description"placement="top":show-after="300":hide-after="200"><span>{{ row.description }}</span></el-tooltip><span v-else>{{ row.description }}</span></div></template></el-table-column></el-table></div>
</template><style scoped>
.static-table-container {padding: 20px;max-width: 800px;margin: 0 auto;
}.header {display: flex;justify-content: space-between;align-items: center;margin-bottom: 20px;padding-bottom: 15px;border-bottom: 1px solid #ebeef5;
}.header h2 {margin: 0;color: #303133;font-size: 24px;font-weight: 600;
}/* 表格樣式優化 */
:deep(.el-table) {border-radius: 8px;overflow: hidden;
}:deep(.el-table th) {background-color: #f5f7fa;color: #606266;font-weight: 600;
}:deep(.el-table td) {padding: 12px 0;
}/* 描述文本樣式 */
.description-text {display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;overflow: hidden;text-overflow: ellipsis;line-height: 1.5;max-height: 3em; /* 2行的高度 */word-break: break-word;cursor: pointer;
}.description-text:hover {color: #409eff;
}
</style>

效果如下

在這里插入圖片描述

總結

本文介紹了如何在 Vue 3 和 Element Plus 中實現表格多行文本截斷與智能 Tooltip 展示功能。通過 CSS 實現多行截斷,通過 JavaScript 動態判斷文本是否溢出,從而智能控制 Tooltip 的顯示。
如果你在項目中遇到類似需求,可以直接使用這個方案,或者根據具體需求進行調整。如果你有任何問題或建議,歡迎在評論區留言討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94686.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用powerquery處理數據,取時間或者日期之前的

Table.AddColumn(#"已更改列類型 1", "自定義 (2)", each letcleanText Text.Replace([備注], "#(lf)", " "),hasTime Text.Contains(cleanText, "時間&#xff1a;"),hasDate Text.Contains(cleanText, "日期&…

Java面試全棧技術解析:從Spring Cloud到Kafka的實戰演練

面試官&#xff1a;請簡單介紹一下Spring Cloud的核心組件&#xff1f; 謝飛機&#xff1a;嗯...Spring Cloud主要是基于Spring Boot的&#xff0c;然后有Eureka做服務發現&#xff0c;Feign做聲明式REST調用&#xff0c;還有Config做配置中心... 面試官&#xff1a;那在電商場…

極簡 useState:手寫 20 行,支持多次 setState 合并

不依賴 React&#xff0c;用 閉包 批處理隊列 實現可合并更新的 useState。一、20 行完整代碼 function createUseState(initialValue) {let state initialValue;let pending null; // 合并隊列let listeners [];const flush () > {if (pending ! null) {…

LabVIEW Vision視覺引導撐簧圈智能插裝

為解決人工插裝連接器撐簧圈時勞動強度大、效率低、一致性差的問題&#xff0c;例以 LabVIEW為開發平臺&#xff0c;結合 IMAQ Vision 機器視覺庫&#xff0c;搭配精密硬件搭建智能插裝系統。系統可適配 9 芯、13 芯、25 芯、66 芯、128 芯 5 種規格工件&#xff0c;經 100 只產…

【Lua】題目小練11

-- 題目1&#xff1a;-- 給定表 t {"apple", "banana", "apple", "orange", "banana", "apple"}-- 寫一個函數 countFreq(tbl) 返回一個新表&#xff0c;統計每個元素出現次數-- 例如&#xff1a;返回 {apple3, …

ElementUI之菜單(Menu)使用

文章目錄項目創建創建項目運行項目整理目錄刪除src/assets中的所有logo.png刪除src/components中的所有文件修改src/route/index.js刪除src/views中所有文件修改src/app.vue整理完目錄如下引入ElementUI安裝ElementUI引入ElementUI測試是否安裝成功編寫src/app.vue運行結果編寫…

Python訓練營打卡Day44-通道注意力(SE注意力)

知識點回顧&#xff1a; 不同CNN層的特征圖&#xff1a;不同通道的特征圖什么是注意力&#xff1a;注意力家族&#xff0c;類似于動物園&#xff0c;都是不同的模塊&#xff0c;好不好試了才知道。通道注意力&#xff1a;模型的定義和插入的位置通道注意力后的特征圖和熱力圖 內…

shiro進行解密

目錄Shiro 解密的核心注意事項1. 密碼處理&#xff1a;堅決避免 “可逆解密”2.例子【自己模擬數據庫&#xff0c;未連數據庫】:Shiro 解密的核心注意事項 1. 密碼處理&#xff1a;堅決避免 “可逆解密” 禁用明文存儲:永遠不要將明文密碼存入數據庫&#xff0c;必須使用 Has…

更改 Microsoft Edge 瀏覽器的緩存與用戶數據目錄位置

Microsoft Edge瀏覽器默認會將緩存文件和用戶數據存儲在系統盤&#xff08;通常是C盤&#xff09;&#xff0c;隨著使用時間的增長&#xff0c;這些文件可能會占用大量空間。本文將詳細介紹多種更改Edge瀏覽器緩存位置和用戶數據目錄位置的方法&#xff0c;幫助您更好地管理磁盤…

【傳奇開心果系列】Flet框架實現的圖形化界面的PDF轉word轉換器辦公小工具自定義模板

let框架實現的圖形化界面的PDF轉word轉換器辦公小工具自定義模板一、效果展示截圖二、PDF轉Word轉換器概括介紹三、功能特性四、安裝依賴五、運行程序六、使用說明七、注意事項八、技術棧九、系統要求十、源碼下載地址 一、效果展示截圖二、PDF轉Word轉換器概括介紹 一個基于Fl…

STM32 定時器(PWM輸入捕獲)

以下是基于STM32標準庫&#xff08;以STM32F103為例&#xff09;實現PWM輸入模式&#xff08;自動雙沿捕獲&#xff09;的完整代碼&#xff0c;通過配置定時器的PWM輸入模式&#xff0c;可自動捕獲外部PWM信號的周期&#xff08;頻率&#xff09;?和占空比&#xff0c;無需手動…

Web安全開發指導規范文檔V1.0

一、背景 團隊最近頻繁遭受網絡攻擊,引起了部門技術負責人的重視,筆者在團隊中相對來說更懂安全,因此花了點時間編輯了一份安全開發自檢清單,覺得應該也有不少讀者有需要,所以將其分享出來。 二、編碼安全 2.1 輸入驗證 說明 檢查項 概述 任何來自客戶端的數據,如URL和…

在Godot中為您的游戲添加并控制游戲角色的完整技術指南

這是一個在Godot中為您的游戲添加并控制玩家角色的完整技術指南。這個過程分為三大步&#xff1a;?準備資源、構建場景、編寫控制腳本。道可道&#xff0c;非常道&#xff0c;名可名&#xff0c;非常名&#xff01;第一步&#xff1a;準備資源&#xff08;建模與動畫&#xff…

Flink 狀態 RocksDBListState(寫入時的Merge優化)

RocksDBListState<K, N, V> RocksDBListState 繼承自 AbstractRocksDBState<K, N, List<V>>&#xff0c;并實現了 InternalListState<K, N, V> 接口。繼承 AbstractRocksDBState: 這意味著它天然獲得了與 RocksDB 交互的底層能力&#xff0c;包括&…

zookeeper-保姆級配置說明

一. 基本配置&#xff1a;clientPort&#xff1a; 客戶端連接的服務器所監聽的tcp端口&#xff0c;默認2181dataDir&#xff1a;內存數據庫保存的數據路徑。myid也存放在這個目錄下&#xff0c;數據以異步方式寫入。dataLogDir&#xff1a;事務日志存放路徑。服務在確認一個事務…

半小時打造七夕傳統文化網站:Qoder AI編程實戰記錄

背景 最近七夕到了&#xff0c;恰逢Qoder上線&#xff0c;萌生了一個想法&#xff0c;寫一個以中國傳統七夕為主題的網站。 七夕中國傳統情人節 Qoder 介紹 Qoder 是阿里巴巴推出的一款旨在提升開發效率的 AI 編程平臺。它通過上下文工程技術和智能體輔助&#xff0c;幫助開…

常見的 Loader 和 Plugin?

Loader: babel-loader&#xff1a;將ES6的代碼轉換成ES5的代碼。css-loader&#xff1a;解析CSS文件&#xff0c;并處理CSS中的依賴關系。style-loader&#xff1a;將CSS代碼注入到HTML文檔中。file-loader&#xff1a;解析文件路徑&#xff0c;將文件賦值到輸出目錄&#xff0…

設計模式學習筆記-----抽象策略模式

抽象策略模式由五個核心組件組成策略接口定義所有策略的統一規范&#xff0c;是策略模式的 "契約"mark()&#xff1a;策略的唯一標識&#xff08;類似字典的 key&#xff09;&#xff0c;默認返回 null&#xff0c;需具體策略實現類重寫&#xff08;如InterviewSubje…

RabbitMQ面試精講 Day 30:RabbitMQ面試真題解析與答題技巧

【RabbitMQ面試精講 Day 30】RabbitMQ面試真題解析與答題技巧 開篇&#xff1a;系列收官之作&#xff0c;直擊面試核心 今天是“RabbitMQ面試精講”系列的第30天&#xff0c;也是本系列的收官之作。經過前29天對RabbitMQ核心概念、高級特性、集群架構、性能調優與開發運維的系…

Coze Studio開源版:AI Agent開發平臺的深度技術解析- 入門篇

Coze Studio開源版&#xff1a;AI Agent開發平臺的深度技術解析 引言 在人工智能快速發展的今天&#xff0c;AI Agent&#xff08;智能體&#xff09;已成為連接大語言模型與實際應用場景的重要橋梁。然而&#xff0c;構建一個功能完整、性能穩定的AI Agent開發平臺并非易事&am…