文本溢出省略并Tooltip组件在表单和表格内的使用

实现文本溢出省略与 Tooltip 提示的组件

组件核心功能场景

  • 文本溢出时自动显示省略号并激活 Tooltip
  • 表格内场景:无论文本是否溢出,操作图标始终保持可见

组件代码

javascript 复制代码
<template>
  <div class="flex items-center">
    <el-tooltip :disabled="!isOverflow" :content="text" placement="top">
      <span
        ref="textRef"
        class="ellipsis-text"
        :style="[{ maxWidth }, textStyle]"
        @mouseenter="checkOverflow"
      >
        {{ text }}
      </span>
    </el-tooltip>
    <div class="ml-1 flex items-center">
      <slot name="icon" />
    </div>
  </div>
</template>
<script setup>
import { ref, onMounted, watch } from 'vue';

const props = defineProps({
  text: {
    type: String,
    default: '',
  },
  maxWidth: {
    type: String,
    default: '128px',
  },
  textStyle: Object
});

const textRef = ref(null);
const isOverflow = ref(false);

const checkOverflow = () => {
  const el = textRef.value;
  if (!el) return;
  isOverflow.value = el.scrollWidth > el.clientWidth;
};

onMounted(checkOverflow);
watch(() => props.text, checkOverflow);
</script>

<style scoped>
.ellipsis-text {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 26px;
}
</style>

使用场景与示例

表格列应用

html 复制代码
[
......,
{
    label: 'AccessKey',
    width: 270,
    showOverflowTooltip: false,
    disableEllipsis: true,
    render: (scoped) => (
      <TextWithIcon text={scoped.row.accessKey} maxWidth="240px">
        {{
          icon: () => (
            <Icon
              icon="ep:document-copy"
              size={16}
              style={{ color: 'var(--aq-color-primary)', cursor: 'pointer' }}
              class="ml-1 mr-2px"
              onClick={() => handleCommand(scoped.row.accessKey)}
            />
          ),
        }}
      </TextWithIcon>
    ),
  },
  ]

表单详情页应用

html 复制代码
<template>
    <TextWithIcon :text="item.content" maxWidth="224px"></TextWithIcon>
</template>

实现逻辑

比较机制

  • 通过比较元素的 scrollWidth 和 clientWidth 判断是否溢出
  • 在组件挂载、文本内容变化时自动重新检测
  • 使用 nextTick 确保 DOM 更新后执行检测

触发条件

  • 仅在鼠标悬停时检测溢出状态
  • 动态控制 Tooltip 的禁用状态
  • 避免不必要的 DOM 操作和事件监听

扩展性

  • 通过插槽支持自定义图标
  • 支持传入自定义样式对象
  • 可配置最大宽度参数
相关推荐
ym hyd 1113 小时前
试题库管理系统源码 Java+SpringBoot+Vue3 前后分离
java·vue.js·spring boot·毕设
迅猛龙办公室3 小时前
Python输出当前计算机的系统日期和时间
开发语言·前端·python
小狼154544 小时前
浏览器扩展脚本为什么有时候不生效:注入时机、iframe 和单页路由,多多开票助手
前端·chrome
じòぴé南冸じょうげん4 小时前
油猴脚本突然发现变成灰色了,无法使用?页面不生效?刷新页面没反应?
前端
Csvn6 小时前
组合式 API(Composition API)
前端
火柴就是我7 小时前
Android 打包报错 25.0.3
android·前端
BD_Marathon7 小时前
消息对象中字段的说明
java·前端·python
八荒启·交互动画7 小时前
Web特效025—用 Canvas 2D 做Web特效的定义与边界:这支画笔能做到哪一步
前端·webgl·网页特效·八荒启-交互动画·八荒启
Ai-_Man7 小时前
您您这可以把Dola的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。用AI导出鸭,答案是可以的
开发语言·前端·人工智能·小程序
excel7 小时前
Nuxt 中使用 useHead 优化 SEO 与 GEO
前端