文本溢出隐藏 显示省略号,鼠标悬浮展示 el-tooltip(TooltipIsShowMixin封装)

目录

  • [mixins 封装](#mixins 封装)
  • [使用 TooltipIsShowMixin](#使用 TooltipIsShowMixin)
  • 效果展示

mixins 封装

TooltipIsShowMixin.js

js 复制代码
export const TooltipIsShowMixin = {
  data() {
    return {
      tooltipIsShow: false
    }
  },
  methods: {
    tooltipIsDisHandler(className) {
      this.$nextTick(() => {
        const dom = document.querySelector(className)
        const domScrollWidth = dom && dom.scrollWidth
        const domClientWidth = dom && dom.clientWidth
        // console.log('domScrollWidth----', domScrollWidth)
        // console.log('domClientWidth----', domClientWidth)
        this.tooltipIsShow = domClientWidth >= domScrollWidth
      })
    }
  }
}

使用 TooltipIsShowMixin

html 复制代码
<div class="list" :style="{ '--height': tableMaxHeight + 'px' }">
  <div v-for="(item, index) in tableData" :key="index" class="list-card">
    <div class="list-card-pic">
      <div class="list-card-pic-type">{{ item.type }}</div>
      <div class="list-card-pic-time">{{ item.duration }} {{ item.createTime }}</div>
    </div>
    <div class="list-card-info">
      <div class="list-card-info-header">
        <div class="list-card-info-header-title font-bold text-lg">{{ item.title }}</div>
        <div class="list-card-info-header-opera">
          <el-button type="text" icon="el-icon-edit" />
          <el-button type="text" icon="el-icon-delete" />
        </div>
      </div>
      <div class="list-card-info-describe">
        <el-tooltip
          effect="dark"
          :content="item.description"
          placement="top-start"
          :disabled="tooltipIsShow"
        >
          <span
            :class="[`description${index}`]"
            @mouseenter="tooltipIsDisHandler(`.description${index}`)"
          >
            {{ item.description }}
          </span>
        </el-tooltip>
      </div>
    </div>
  </div>
</div>

<script>
import { TooltipIsShowMixin } from '@/mixins/TooltipIsShowMixin'

export default {
  // ...
  mixins: [TooltipIsShowMixin],
}
</script>
<style scoped lang="scss">
.list {
  height: var(--height);
  overflow: auto;
  &-card {
    display: inline-block;
    width: calc(25% - 12px);
    margin: 0 15px 15px 0;
    box-shadow: 0 0 5px #ccc;

    &:nth-child(4n) {
      margin-right: 0;
    }

    &-pic {
      height: 170px;
      background: url('~@/assets/image/default-course-cover.png') no-repeat;
      background-size: 100% 100%;
      position: relative;
      color: #fff;
      $width: 10px;
      &-type {
        position: absolute;
        top: $width;
        right: $width;
        background: rgba($color: #fff, $alpha: 0.3);
        border-radius: 10px;
        padding: 3px 8px;
      }
      &-time {
        position: absolute;
        bottom: $width;
        right: $width;
      }
    }
    &-info {
      padding: 10px 20px;
      background-color: #fff;
      &-header {
        display: flex;
        justify-content: space-between;
        align-items: center;
      }
      &-describe {
        margin: 5px 0;
        color: #00000073;
        span {
          display: inline-block;
          width: 100%;
          white-space: nowrap;
          overflow: hidden;
          text-overflow: ellipsis;
        }
      }
    }
  }
}
</style>

效果展示

未溢出的鼠标悬浮不展示 el-tooltip

溢出展示省略号的鼠标悬浮展示 el-tooltip

相关推荐
To_OC7 小时前
写了三遍 Todo List,我终于搞懂了 React 父子组件到底怎么通信
前端·javascript·react.js
勇往直前plus8 小时前
Vue3(篇一) 核心概念——响应式模板语法与组件基础
前端·javascript·vue.js
咩咩啃树皮8 小时前
第43篇:Vue3计算属性(computed)完全精讲——缓存机制、依赖计算、业务最优解
前端·vue.js·缓存
用户938515635079 小时前
从零搭建 AI 日记助手:用 Milvus 向量数据库 + RAG 让机器读懂你的每一天
javascript·人工智能·全栈
徐小夕10 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
a11177611 小时前
坦克大战3D Three.js 3D (开源项目)
开发语言·javascript·3d
kyriewen12 小时前
别再乱用useEffect了——你写的10个里有8个不该存在
前端·javascript·react.js
Ivanqhz12 小时前
Rust &‘static str浅析
java·前端·javascript·rust
IT_陈寒12 小时前
SpringBoot这个分页坑,我踩了三天才爬出来
前端·人工智能·后端
颜酱12 小时前
05 | 召回前置准备:根据业务数据库生成各数据库(读取配置阶段)
前端·人工智能·后端