文本超出时显示...,显示tooltip的vue组件

​​web前端,有时需要控制某个显示区域显示内容超出时显示...同时展示tooltip, 但是这个位置的内容在文本少时不需要展示tooltip和…,这个组件实现这个功能

<template>
  <div ref="overflowTip">
    <el-tooltip :disabled="disabled" placement="top-start" v-bind="$attrs">
      <div class="overflow-tip" :class="{ ellipse: !disabled }">
        <slot>
          {{ content }}
        </slot>
      </div>
      <span slot="content">
        <slot name="content">
          {{ content }}
        </slot>
      </span>
    </el-tooltip>
  </div>
</template>

<script>
  // tooltip 位置定位的很远不在column内部的问题解决:使用overflow显示...后的小范围的元素定位tooltip,实现步骤如下:
  // 1 放开 "overflow显示..." 判断是不是内容超出
  // 2 内容超出后 设置overflow显示... ,根据是否超出设置disabled
  export default {
    props: {
      content: {
        type: String,
        default: "",
      },
      placement: {
        type: String,
        default: "top-start",
      },
    },
    watch: {
      content: {
        immediate: false,
        handler() {
          this.visible = false;
          this.$nextTick(() => {
            this.init();
            this.visible = true;
          });
        },
      },
    },
    data() {
      return {
        disabled: true,
        visible: true,
      };
    },
    methods: {
      init() {
        const el = this.$refs["overflowTip"];
        if (el) {
          const offsetW = el.offsetWidth;
          const scrollWidth = el.scrollWidth;
          this.disabled = offsetW >= scrollWidth;
        }
      },

      resizeEvent() {
        clearTimeout(this.timeO);
        this.timeO = setTimeout(() => {
          // 放开内容,再次计算
          this.disabled = true;
          this.$nextTick(() => {
            this.init();
          });
        }, 300);
      },
    },
    mounted() {
      this.init();
      window.addEventListener("resize", this.resizeEvent.bind(this));
    },

    beforeDestroy() {
      window.removeEventListener("resize", this.resizeEvent);
    },
  };
</script>

<style lang="scss" scoped>
  .overflow-tip {
    display: inline-block;

    white-space: nowrap;

    width: 100%;
  }

  .ellipse {
    overflow: hidden;
    text-overflow: ellipsis;
  }
</style>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值