首页IT科技elementui dialog高度(Element UI 扩展tooltip 只在内容过长才显示)

elementui dialog高度(Element UI 扩展tooltip 只在内容过长才显示)

时间2025-06-19 20:50:32分类IT科技浏览5689
导读:1. 介绍 Tooltip常用于展示鼠标 hover 时的提示信息。...

1. 介绍

Tooltip常用于展示鼠标 hover 时的提示信息               。

而在实际过程中               ,有这么一个需求:只有文字内容排不下                       ,出现省略号        ,才需要显示tooltip的提示内容                       。

本文章的思路是通过一个自定义指令实现如下效果:姓名字段过长时才显示tooltip

2.element-ui(vue2版本)

2.1 注册指令

1)akTooltipAutoShow.js

说明:注册了一个名称为 ak-tooltip-auto-show 的指令        。会根据内容进行判断是否展示tooltip        。

2.2 使用

说明:使用<el-tooltip v-ak-tooltip-auto-show>包囊展示的内容                       。

<div class="details-inner__row"> <span class="details-inner__row-name">姓名:</span> <el-tooltip placement="top" effect="dark" :content="item.name" v-ak-tooltip-auto-show> <span class="details-inner__row-value">{{item.name}}</span> </el-tooltip> </div> // css .details-inner__row-value {   width: 80%;   display: inline-block;   white-space: nowrap;   text-overflow: ellipsis;   overflow: hidden; }

3. element-plus(vue3版本)

3.1 注册指令

1)akTooltipAutoShow.js

说明:注册了一个名称为 ak-tooltip-auto-show 的指令                。会根据内容进行判断是否展示tooltip        。

注意:因为element-plus与之前的element-ui不一样        ,在element-plus(vue3版本)中是 <展示组件>包含<el-tooltip>的                       ,所以代码中需要在<展示组件>内查找<el-tooltop>                       。

import { getStyle } from element-plus/lib/utils/dom/index; /** * show-overflow-tooltip for text * 当text没有被折叠时                ,不显示tooltip */ const akTooltipAutoShow = { created(el, binding, vnode) { let tooltipNode = vnode.children.find((childrenCmpt) => childrenCmpt.component?.type.name == ElTooltip); if (tooltipNode) { let { content } = tooltipNode.props; if (content && [添加, 编辑, 删除,查看].includes(content)) { el.addEventListener(click, function (e) { let defalutDisabled = tooltipNode.component.props.disabled; if (!defalutDisabled) { tooltipNode.component.props.disabled = true; setTimeout(() => { tooltipNode.component.props.disabled = defalutDisabled; }, 200); } }); } else { el.addEventListener(mouseenter, (e) => { tooltipNode.component.props.disabled = true; const range = document.createRange(); range.setStart(el, 0); range.setEnd(el, el.childNodes.length); const rangeWidth = Math.round(range.getBoundingClientRect().width); const padding = (parseInt(getStyle(el, paddingLeft), 10) || 0) + (parseInt(getStyle(el, paddingRight), 10) || 0); if (rangeWidth + padding > el.offsetWidth || el.scrollWidth > el.offsetWidth) { tooltipNode.component.props.disabled = false; } }); } } } }; export default akTooltipAutoShow;

2) 进行局部或全局注册

// main.js const app = createApp(App); import akTooltipAutoShow from ./akTooltipAutoShow.js; app.directive(ak-tooltip-auto-show, akTooltipAutoShow);

3.2 使用

说明:因element-plus(vue3版本)本身不提供 root element        ,所以需要把此指令放到<el-tooltip>的父级组件                。

<div class="details-inner__row">   <span class="details-inner__row-name">姓名:</span>   <span class="details-inner__row-value" v-ak-tooltip-auto-show>     <el-tooltip placement="top-end" :content="item.name">{{item.name}}</el-tooltip>   </span> </div> // css .details-inner__row-value {   width: 80%;   display: inline-block;   white-space: nowrap;   text-overflow: ellipsis;   overflow: hidden; }
End
Web开发之路系列文章
菜单加载中...
声明:本站所有文章                       ,如无特殊说明或标注                ,均为本站原创发布。任何个人或组织,在未征得本站同意时                       ,禁止复制               、盗用                       、采集        、发布本站内容到任何网站        、书籍等各类媒体平台                       。如若本站内容侵犯了原著者的合法权益                        ,可联系我们进行处理                        。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
jstat命令怎么知道一次minor GC之后存活多少对象(jot命令 – 创建数字列表) 网站降权后,如何恢复排名?(百度排名降低,该怎么办?)