vue3自定义指令实现超出显示省略号,鼠标浮入弹出title,显示全部文本

这篇具有很好参考价值的文章主要介绍了vue3自定义指令实现超出显示省略号,鼠标浮入弹出title,显示全部文本。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue3自定义指令

代码实现

import type { DirectiveBinding } from 'vue'
export default {
  mounted(el: HTMLElement, binding: DirectiveBinding) {
    const scroll = el.scrollWidth
    el.style.overflow = 'hidden'
    el.style.textOverflow = 'ellipsis'
    el.style.whiteSpace = 'nowrap'
    const off = el.offsetWidth
    if (off < scroll) {
      el.setAttribute('title', el.innerHTML)
    }
    if (binding.value) {
      el.style.width = `${binding.value}px`
    }
  },
  updated(el: HTMLElement, binding: DirectiveBinding) {
    const scroll = el.scrollWidth
    el.style.overflow = 'hidden'
    el.style.textOverflow = 'ellipsis'
    el.style.whiteSpace = 'nowrap'
    const off = el.offsetWidth
    if (off < scroll) {
      el.setAttribute('title', el.innerHTML)
    }
    if (binding.value) {
      el.style.width = `${binding.value}px`
    }
  },
}

代码解释

mountedupdated 是 Vue 生命周期钩子函数,分别表示指令挂载到元素指令所在组件更新时触发

el: HTMLElement 和 binding: DirectiveBinding 是方法参数,el 表示指令作用的元素,binding 包含指令的绑定值、参数和修饰符等信息。

el.offsetWidth 获取的是元素在渲染时所占据的整体宽度,包括内容区域、内边距和边框。它不包括滚动条、外边距和任何在元素外部溢出的内容。这个值是一个整数,单位为像素(px)。

el.scrollWidth 获取的是元素内容区域的总宽度,包括被隐藏的部分。如果元素内容没有溢出或没有设置固定的宽度,那么 scrollWidth 将等于 offsetWidth,因为内容没有超出可见区域。如果元素内容超出了可见区域,scrollWidth 将大于等于 offsetWidth。这个值也是一个整数,单位为像素(px)。

要注意的是,如果元素的内容在水平方向上没有超出可见区域,那么 scrollWidth 和 offsetWidth 的值将相等。只有当内容超出可见区域时,它们的值才会不同。

if (off < scroll) 判断元素的整体宽度是否小于内容区域的总宽度,如果是,则表示内容溢出。

el.setAttribute(‘title’, el.innerHTML) 通过设置 title 属性将元素的原始内容作为工具提示文本展示。

if (binding.value) 判断指令的绑定值是否存在,如果存在,则设置元素的宽度为绑定值所指定的像素值。

自定义指令的使用

<template>
  <div style="width: 60px;" v-ellipsis-tooltip>超出文本隐藏</div>
</template>

<script setup lang="ts">
import { EllipsisTooltip as vEllipsisTooltip} from "@nofar-ui/directives"
</script>

运行效果图

自定义指令 设置鼠标进入展示全部文字,vue.js,前端,javascript,vscode

vue3自定义指令的生命周期

created(el, binding, vnode, prevVnode) {},// 在绑定元素的 attribute 前或事件监听器应用前调用
beforeMount(el, binding, vnode, prevVnode) {}, // 在元素被插入到 DOM 前调用

mounted(el, binding, vnode, prevVnode) {}, //
在绑定元素的父组件及他自己的所有子节点都挂载完成后调用

beforeUpdate(el, binding, vnode, prevVnode) {}, // 绑定元素的父组件更新前调用

updated(el, binding, vnode, prevVnode) {}, //
在绑定元素的父组件及他自己的所有子节点都更新后调用
如果想要更改参数,可以在该生命周期内更改

beforeUnmount(el, binding, vnode, prevVnode) {}, // 绑定元素的父组件卸载前调用
unmounted(el, binding, vnode, prevVnode) {} // 绑定元素的父组件卸载后调用

参数

**参数el:**这个参数就是指令绑定的元素,在上述代码中就是<div style="width: 60px;" v-ellipsis-tooltip>超出文本隐藏</div>这个节点
参数binding: 指令里也可以传参,要加上引号:文章来源地址https://www.toymoban.com/news/detail-788897.html

<div v-ellipsis-tooltip="'60'">超出文本隐藏</div>

到了这里,关于vue3自定义指令实现超出显示省略号,鼠标浮入弹出title,显示全部文本的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue element表格某一列内容过多,超出省略号显示

    在使用element组件库里面的table组件时,遇到某一个字段内容过多,导致td高度被撑开,布局显得很不美观, 这时我们只要给table-cloumn添加一个属性show-overflow-tooltip。 实现超出隐藏,并有提示,这样的话会有下面效果: 提示的长度特别长,超出了屏幕,不太好看。  可以在处

    2024年02月15日
    浏览(43)
  • css 实现超出两行、多行文字省略号显示

    在我们日常使用文字超出省略号显示,一般使用下面的方式实现,但是当有需求需要实现两行乃至多行时,该怎么实现呢。 单行省略: 多行省略: ps:需要注意的是,记得控制元素width。

    2024年02月11日
    浏览(57)
  • 文字内容超出两行时显示省略号

    设置内容超出两行显示省略号的css样式如下: 这个样式可用于uniapp的微信小程序开发。

    2024年02月13日
    浏览(57)
  • Element ui table表格内容超出隐藏显示省略号

    element ui官方文档上面有个参数 给el-table-column设置:show-overflow-tooltip=\\\"true\\\"属性可以使单元格超出的内容被隐藏显示为...当鼠标移入时单元格的上方会弹出一个tooltip来显示单元格的所有内容。 效果图: 有时候因为table中的文字非常的多,而show-overflow-tooltip默认是把折叠的内容全

    2024年02月11日
    浏览(38)
  • CSS:实现文字溢出显示省略号且悬浮显示tooltip完整信息

    组件: element ui中的tooltip组件 思路:通过ref获取宽度进行判断,当子级宽度大于对应标签/父级宽度显示tooltip组件

    2024年02月09日
    浏览(53)
  • CSS实现单行或者多行文本溢出隐藏并且显示省略号

    如果文字超出父元素指定宽度,文字会自动换行,而连续不间断数字和英文字母(没有其他字符)不会自动换行; 详细步骤: 第一步(不换行):white-space:nowrop;(对于连续的数字或者英文字母可省略) 第二步(溢出隐藏)overflow:hidden; 第三步(文本溢出显示省略号)text-overf

    2024年02月16日
    浏览(54)
  • 【vue】Element ui 表格的header 标题文字过于太长 而需要显示省略号并用tooltip显示全部信息

    有时候如果table的header的内容太多而页面的宽度有限,这个时候需要将多长的文字隐藏起来,显示省略号并用弹窗显示全部信息,这时候可以使用render-header这个属性,自定义生成header,看下面的代码: 上面代码中renderHeader方法里要注意column 包含的是每一行的内容,给header添

    2024年02月03日
    浏览(47)
  • element-plus中的tooltip组件实现文字溢出显示省略号,悬浮显示tooltip完整信息

    需求:要求单行显示文字,溢出部分需要显示省略号,但鼠标悬浮时需要显示 tooltip 完整信息。 关键点:文字溢出显示省略号就不说了,主要是如何判断什么时候需要显示 tooltip,什么时候不显示。 思路:如果文字省略时,子元素的宽度势必小于父元素的宽度,则可通过监听

    2024年02月12日
    浏览(58)
  • css文本超长显示省略号,鼠标hover省略号展示全部内容

    有时候我们会发现鼠标hover到文字省略号上,会展示出全部内容,效果如下: 首先,文字过长展示省略号 再借助鼠标悬停标签展示其 title 内容的特性,为标签加上 title属性,实现我们想要的效果 有关 title 属性的介绍:

    2024年02月11日
    浏览(57)
  • 多行文本溢出显示省略号

    文本溢出显示省略号分两种情况,单行文本溢出显示省略号(参考上篇文章https://blog.csdn.net/qq_43687594/article/details/123511873),另外一种就是多行文本溢出显示省略号。 第一种: 使用定位伪元素遮盖末尾文字 步骤: 给父元素设置: 给父元素设置伪元素::after ,并为其设置属性:

    2023年04月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包