二次封装el-tooltip 内容超过一定宽度时鼠标悬停提示

背景:一些特殊的场景需要根据一定的宽度来控制文字内容是否溢出显示省略号显示并且在鼠标悬浮时有提示,内容未超过时正常显示内容。

这里是对element ui的tooltip组件做二次封装,效果见下图:

 封装代码如下:

<template>
  <el-tooltip
    v-bind="$attrs"
    ref="tooltipRef"
    :disabled="isDisabled"
    @mouseenter.native="handleMouseEnter"
  >
    <slot />
  </el-tooltip>
</template>

<script>
export default {
  name: 'Tooltip',
  data () {
    return {
      isDisabled: false
    }
  },
  methods: {
    handleMouseEnter () {
      let elm = this.$slots.default[0].elm
      if (!elm) return
      let tagList = elm.getElementsByTagName('*')
      let maxWidth
      if (tagList.length > 0) {
        maxWidth = Math.max(...Array.from(elm.getElementsByTagName('*')).map(o => o.scrollWidth || 0))
      } else {
        maxWidth = elm.scrollWidth
      }
      const padding = (parseInt(this.getStyle(elm, 'paddingLeft'), 10) || 0) +
        (parseInt(this.getStyle(elm, 'paddingRight'), 10) || 0)
      if ((maxWidth + padding > elm.offsetWidth || elm.scrollWidth > elm.offsetWidth)) {
        this.isDisabled = false
      } else {
        this.isDisabled = true
      }
    },
    // 经过计算机/浏览器计算后的样式
    getStyle (obj,attr) {
      return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr]
    },
  }

}
</script>

使用方法同el-tooltip,需要注意的是要设置宽度后才生效,在项目中实际使用及样式设置如下:

<tooltip placement="top" :content="row.ruleName+' '+row.typeList.join(';')">
   <div class="right-box">
     <div class="table-alarm alarm-title">{{ row.ruleName }}</div>
     <div class="alarm-rule-content" >{{row.typeList.join(';')}}</div>
   </div>
</tooltip>
 .right-box{
    width: 160px;
    line-height: initial;
    .item-name{
      display: inline-block;
      max-width: 130px;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      position: relative;
    }
  }

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值