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;
}

效果

在这里插入图片描述

在这里插入图片描述

GitHub 加速计划 / vu / vue
109
19
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:4 个月前 )
9e887079 [skip ci] 1 年前
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 1 年前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐