Vue3 el-tooltip 根据内容控制宽度大小换行和并且内容太短不显示

el-tooltip 根据长度自适应换行以及显隐

环境

vue: "3.2.37"
element-ui: "2.1.8"

要求

  1. tooltip 根据内容自动换行
  2. 如果内容超出显示省略号显示,不超出不显示 tooltip

代码

组件

// ContentTip 组件
<template>
  <el-tooltip
    v-bind="$attrs"
    :content="content"
    :disabled="showTooltip"
    :append-to="toolDom"
    :effect="effect"
    :placement="placement"
  >
    <div ref="toolDom" @mouseover="onMouseOver(content)">
      <slot />
    </div>
  </el-tooltip>
</template>

<script setup>
const toolDom = ref()
const showTooltip = ref(true)
const tooltipWidth = ref(0)
defineProps({
  content: {
    type: String,
    default: ''
  },
  effect: {
    type: String,
    default: 'dark'
  },
  placement: {
    type: String,
    default: 'top'
  }
})

function findParent(node) {
  if (node.className === 'el-tooltip__trigger') {
    return node
  } else {
    return findParent(node.parentNode)
  }
}

function onMouseOver() {
  const tag = toolDom.value
  const parentWidth = findParent(tag).offsetWidth // 获取元素父级可视宽度
  const contentWidth = tag.children[0].offsetWidth // 获取元素可视宽度
  showTooltip.value = contentWidth < parentWidth
  tooltipWidth.value = parentWidth + 'px'
}
</script>

<style lang="scss" scoped>
::v-deep .el-popper {
  max-width: v-bind(tooltipWidth);
}
</style>

使用

<div style="width: 100px; overflow: hidden">
    <tooltip :content="'我是內容很長的一個內容'">
       <div class="text-ellipsis" style="max-width: fit-content">我是內容很長的一個內容</div>
    </tooltip>
</div>
.text-ellipsis {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

效果

在这里插入图片描述

在这里插入图片描述文章来源地址https://uudwc.com/A/0kkDk

原文地址:https://blog.csdn.net/weixin_38992765/article/details/132666052

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

上一篇 2023年09月06日 07:58
下一篇 2023年09月06日 07:58