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

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

时间2025-04-29 06:25:38分类IT科技浏览4947
导读: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
python转换成c(python中capitalize的三种转换操作) win10声音很奇怪(Win10出现声音问题怎么办? win10声音问题疑难解惑)