位置: IT常识 - 正文

自定义vue指令,实现el-tooltip仅在文字溢出时显示,文字未溢出则不显示,复制即可使用(vue3自定义指令)

编辑:rootadmin
自定义vue指令,实现el-tooltip仅在文字溢出时显示,文字未溢出则不显示,复制即可使用 一、写在开头

推荐整理分享自定义vue指令,实现el-tooltip仅在文字溢出时显示,文字未溢出则不显示,复制即可使用(vue3自定义指令),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue3.0自定义指令,vuejs自定义指令,自定义vue指令,vuecli自定义指令,vue3自定义指令,自定义vue指令,vue3.0自定义指令,自定义vue指令,内容如对您有帮助,希望把文章链接给更多的朋友!

在项目里遇到了这种需求,想到el-table里的show-overflow-tooltip属性就有这种效果,在参考了一些网上的文章以及show-overflow-tooltip跟el-tooltip的源码后,觉得使用自定义指令的方式来实现这个需求会很方便,于是便有了以下代码

二、自定义指令代码1、创建一个js文件,复制粘贴以下代码即可使用,无需改动import Vue from 'vue'import debounce from 'throttle-debounce/debounce'import { Tooltip } from 'element-ui'Vue.use(Tooltip)/*** 指令功能:元素内容溢出隐藏时悬浮tooltip展示详细内容,元素内容未溢出时不展示* 基于element-table的show-overflow-tooltip原理与el-tooltip的功能实现* 使用方式:* <div v-overflow-tooltip>这是一段会溢出的文本内容</div>** 指令也可传递参数,参数内容为el-tooltip的参数配置:* <div v-overflow-tooltip="{content:'啦啦啦啦~~~'}">这是一段会溢出的文本内容</div>* *//*** tooltipVM —— el-tooltip的VNode实例* tooltipContent —— 默认提示文本内容* props —— el-tooltip的配置参数* ctx —— 命名空间* activateTooltip —— el-tooltip展开的防抖延迟,默认50ms* */let tooltipContentlet propsconst ctx = '@@store'// 创建一个Vue实例并渲染为真实DOM,内有一个空的el-tooltip组件const vm = new Vue({render (h) {return (<Tooltip ref="customToolTipRef" content={ tooltipContent } { ...{ props } }></Tooltip>)}}).$mount()const tooltipVM = vm.$refs.customToolTipRefconst activateTooltip = debounce(50, tooltipVM => tooltipVM.handleShowPopper())const overflowHandler = (el, binding, vnode) => {// 获取元素文本内容,作为el-tooltip的默认content进行展示el[ctx].tooltipContent = el.innerText || el.textContent// 获取通过指令接收的绑定值el[ctx].props = { ...binding.value }const computedStyle = getComputedStyle(el)// 使用range对象判断文本是否有溢出,优先考虑使用range对象, 因为 scrollWidth 属性在火狐浏览器 v32 版本中有 bug。当元素的 CSS 属性中使用了 text-overflow: ellipsis 和 box-sizing: border-box 时获取到的 scrollWidth 的值会比真实值偏小const range = document.createRange()range.setStart(el, 0)range.setEnd(el, el.childNodes.length)const rangeDOM = range.getBoundingClientRect()const padding = parseInt(computedStyle.paddingLeft.replace('px', '')) + parseInt(computedStyle.paddingRight.replace('px', ''))const rangeWidth = Math.round(rangeDOM.width)if (rangeWidth + padding > el.offsetWidth || el.scrollWidth > el.offsetWidth) {// 文本溢出了,绑定鼠标事件el.addEventListener('mouseenter', el[ctx].handleMouseEnter)el.addEventListener('mouseleave', el[ctx].handleMouseLeave)} else {// 文本未溢出,移除鼠标事件el.removeEventListener('mouseenter', el[ctx].handleMouseEnter)el.removeEventListener('mouseleave', el[ctx].handleMouseLeave)}}Vue.directive('overflowTooltip', {// 只调用一次,指令第一次绑定到元素时调用。在这里进行一次初始化设置,初始化鼠标事件,控制el-tooltip的展开与收起bind: function (el, binding, vnode) {el[ctx] = {tooltipContent: '',props: {},handleMouseEnter: () => {// 展开el-tooltip方法,将el-tooltip的引用元素指向当前绑定节点,然后执行展开逻辑tooltipContent = el[ctx].tooltipContentprops = el[ctx].propsvm.$forceUpdate()tooltipVM.referenceElm = eltooltipVM.$refs.popper && (tooltipVM.$refs.popper.style.display = 'none')tooltipVM.doDestroy()tooltipVM.setExpectedState(true)activateTooltip(tooltipVM)},handleMouseLeave: () => {// 关闭el-tooltip方法,销毁内部popperJS的实例后走关闭逻辑tooltipVM.doDestroy()tooltipVM.setExpectedState(false)tooltipVM.handleClosePopper()}}},inserted: overflowHandler,componentUpdated: overflowHandler,unbind (el) {delete el[ctx]}})2、使用方法2.1. 默认无参数用法自定义vue指令,实现el-tooltip仅在文字溢出时显示,文字未溢出则不显示,复制即可使用(vue3自定义指令)

没有传递值给指令的时候,将使用el-tooltip的默认配置,提示内容默认显示指令绑定元素的文本内容

<el-input v-model="value" placeholder="请输入内容" style="width: 200px; margin-bottom: 25px"></el-input><div v-overflow-tooltip class="overflow">{{ value }}</div>

默认效果

2.2. 自定义传递参数用法

参数内容其实就是el-tooltip官方定义可以传递的配置参数,我们可以自定义内容、主题、显示位置等

<el-input v-model="value" placeholder="请输入内容" style="width: 200px; margin-bottom: 25px"></el-input><div v-overflow-tooltip="{content:'这是通过content自定义的溢出显示内容',effect:'light'}" class="overflow">{{ value }}</div>

自定义参数效果

三、实现原理简述

不了解自定义指令的小伙伴可以看一下我在文末分享的链接。

最开始我们需要创建一个tooltip的vue实例,以及其他的一些空变量为后续内容做准备。此处为了方便,vue实例中使用了JSX语法,大家可以根据需求更换为h函数(createElement)的写法。

本文链接地址:https://www.jiuchutong.com/zhishi/284052.html 转载请保留说明!

上一篇:如何像专业人员那样在openSUSE上安装和更新软件?opensuse安装软件详细教程(如何使专业人员的工作卓有成效读后感悟)

下一篇:YOLOv5/v8改进主干GhostNetV2系列:首发结合最新NIPS2022华为诺亚的GhostNetV2 架构:引入长距离注意力机制增强廉价操作,构建更强端侧轻量型骨干,打造高效轻量级检测器(改进yolov4)

  • 极米h3如何调整画面大小(极米h3怎么调高低)

    极米h3如何调整画面大小(极米h3怎么调高低)

  • 怎么查看qq好友(怎么查看qq好友的共同好友)

    怎么查看qq好友(怎么查看qq好友的共同好友)

  • 华为手机hd怎么关闭(华为手机hd怎么关闭找不到VOLTE)

    华为手机hd怎么关闭(华为手机hd怎么关闭找不到VOLTE)

  • 误充抖音币怎么退(误充抖音币怎么提现)

    误充抖音币怎么退(误充抖音币怎么提现)

  • 我把对方删了再添加时他会知道吗(我把对方删了再添加时需要验证)

    我把对方删了再添加时他会知道吗(我把对方删了再添加时需要验证)

  • 微信群待办怎么发布(微信群待办怎么设置)

    微信群待办怎么发布(微信群待办怎么设置)

  • 电脑被偷了能定位吗(电脑偷了,具体能定位吗)

    电脑被偷了能定位吗(电脑偷了,具体能定位吗)

  • 10000毫安等于多少安(10000毫安等于多少千瓦时)

    10000毫安等于多少安(10000毫安等于多少千瓦时)

  • 抖音极速版能看直播么(抖音极速版能看到抖音的消息吗)

    抖音极速版能看直播么(抖音极速版能看到抖音的消息吗)

  • 分屏器作用(分屏器使用说明)

    分屏器作用(分屏器使用说明)

  • 华为限制广告跟踪要不要打开(华为限制广告跟踪打开耗电吗)

    华为限制广告跟踪要不要打开(华为限制广告跟踪打开耗电吗)

  • 华为p30有视频通话美颜吗

    华为p30有视频通话美颜吗

  • 华为al00叫什么(华为al00是华为什么型号)

    华为al00叫什么(华为al00是华为什么型号)

  • 怎样连续选择多个文件(怎样连续选择多张幻灯片)

    怎样连续选择多个文件(怎样连续选择多张幻灯片)

  • oppo手机恢复出厂设置后总显示内存不足(oppo手机恢复出厂设置后怎么还原数据)

    oppo手机恢复出厂设置后总显示内存不足(oppo手机恢复出厂设置后怎么还原数据)

  • return返回值返回给谁(return返回值返回到哪里)

    return返回值返回给谁(return返回值返回到哪里)

  • flash有几个对齐(flash8对齐面板在哪里)

    flash有几个对齐(flash8对齐面板在哪里)

  • 台式电脑配置在哪里看(家用电脑台式机推荐配置)

    台式电脑配置在哪里看(家用电脑台式机推荐配置)

  • 手机游戏obb文件放哪(obb游戏数据包放哪里)

    手机游戏obb文件放哪(obb游戏数据包放哪里)

  • seaal10是什么型号手机(sea—al10是什么型号多少钱)

    seaal10是什么型号手机(sea—al10是什么型号多少钱)

  • 手环如何刷公交卡(手环如何刷公交卡使用)

    手环如何刷公交卡(手环如何刷公交卡使用)

  • iphone勿扰和拉黑区别(iphone勿扰和拉黑提示音区别)

    iphone勿扰和拉黑区别(iphone勿扰和拉黑提示音区别)

  • 抖音卸载后原账号在吗(卸载后抖音怎么恢复以前的抖音号)

    抖音卸载后原账号在吗(卸载后抖音怎么恢复以前的抖音号)

  • 闲鱼怎么和淘宝关联(闲鱼怎么和淘宝绑定账号)

    闲鱼怎么和淘宝关联(闲鱼怎么和淘宝绑定账号)

  • MAC OS X Lion启动U盘制作和使用U盘安装系统图文教程(macos usb启动)

    MAC OS X Lion启动U盘制作和使用U盘安装系统图文教程(macos usb启动)

  • 公司有残疾人需要交税吗
  • 所得税季报季末人数怎么计算
  • 增量留抵税额怎么做分录
  • 营业执照注销要收费用吗
  • 个体户开票超过500万能注销吗
  • 如何做好服务 服务行业
  • 金融服务征税范围包括哪些
  • 纳税人如何办理纳税申报流程
  • 增值税的核算方式
  • 计提增值税怎么计提
  • 转让财产收入计入哪个科目
  • 个人如何缴纳公共维修基金
  • 营改增后固定资产进项税抵扣规定
  • 租车租赁费税率是多少
  • 高新技术企业必须要有研发费用吗
  • 想做边销茶生意?增值税可以这样处理
  • 个人代公司付货款要证明吗
  • 定期定额征收适用范围
  • 提供服务的发票可以抵扣税款吗?
  • 收到运费怎么做账
  • 其它综合收益算利润吗
  • 用友软件怎么反记账凭证
  • excel合并的单元格怎么填充序列
  • 企业合并收购,对员工的机会和挑战
  • 营业利润,利润总额的计算公式是
  • vitem
  • hp是什么软件
  • 企业汇算清缴后发现有多计提的成本
  • 会计凭证设计要注意的问题
  • 混合销售会计处理
  • 应退税款抵扣欠税款的账务处理
  • 稽查查补销售额后补开票如何申报
  • 合伙企业分红个税税率表
  • php上传文件类型
  • 收到退回的以前年度的劳务费怎么入账
  • 怎样取消红字
  • hexdump windows
  • 怎样才能帮你
  • 提取企业所得税怎么做会计科目
  • 个体户个人所得税税率表
  • 搅拌机属于哪类税收
  • python多线程编程案例
  • 国家税务局监制的票还能用吗
  • 自动执行python
  • mongodb bi
  • 科技局创业扶持资金
  • 全年一次性奖金单独计税还是并入
  • 预售期的房子是否可以买卖
  • 软件退税款会计如何处理
  • 员工欠薪怎么办
  • 工会疗养费用怎么做账
  • 政府补助的分类及会计处理方法有哪些
  • 在会计中,结转材料实际采购成本时什么意思
  • 同时知识产权专利,其做账是?
  • 现金日记账本月合计怎么划线
  • 深入浅出意思
  • sql语句学习
  • anddroid.process.acore进程停止什么意思
  • linux的sh
  • 如何查看winxp系统的运行内存
  • ubuntudde 中文
  • vi编辑器是干什么的
  • linux网络设备有哪些
  • opengl混合模式
  • 3d引擎开发
  • js创建类对象的方法
  • excel f9刷新
  • jquery操作html代码
  • 批处理文件.bat
  • 使用forever管理nodejs应用教程
  • unity3d最新
  • 单页图片和文字怎么设置
  • js模块化和组件化
  • typescript的缺点
  • Python性能优化指南
  • 税务局与地税局一样吗?
  • 浙江国税qzzn
  • 山东发票认证勾选平台网址
  • 通辽这个地方怎么样
  • 国企重组裁员政策解读
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设