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

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

时间2025-09-19 12:21:00分类IT科技浏览7831
导读: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随机产生不重复整数(python怎么生成随机不重复数组)