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

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

时间2025-07-31 15:28:56分类IT科技浏览6483
导读: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
云优网络(云优CMS:为您打造专业高效的网站内容管理系统) 计算机基础190页第4题春暖花开(一.计算机基础)