实现文字溢出时出现tips

 

实现类似下拉的checkbox中文字溢出的项才出现tips

结合elementui。

html部分

<section @mouseover=handleCellMouseEnter>
   <el-checkbox-group v-model="checkedList" @change="handleCheckedCitiesChange">
       <el-tooltip v-for="(item, index) in list" :key="`${index}_${toolTipList[index]}`" :disabled="toolTipList[index]" popper-class='ad-tooltips place-left' placement="left" ref="tooltip" :content='item'>
              <el-checkbox  :label="item" :data-index="index">{{ item }}</el-checkbox>
        </el-tooltip>
    </el-checkbox-group>
</section>

js部分

export default {
  data() {
    return {
      checkedList: [],
      list: ['a','b'],
      toolTipList: [...new Array(2)].map((e) => {
        return true;
      }),
    };
  },
  methods: {
    handleCellMouseEnter(e) {
      const textDom = e.target.parentNode.querySelector(".el-checkbox__label");
      if (!textDom) {
        return;
      }
      const cw = textDom.clientWidth;
      const range = document.createRange();
      range.setStart(textDom, 0);
      range.setEnd(textDom, textDom.childNodes.length);
      const rangeWidth = range.getBoundingClientRect().width;
      if (rangeWidth > cw) {
        const index = e.target.parentNode.getAttribute("data-index");
        this.toolTipList.splice(index, 1, false);
      }
    }
  }
};

给最外层的div或者section加一个mouseover事件

因为触发的e可能是前面的checkbox也可能是后面的文字,所以先获取父节点在找label的class,保证获取到文字的dom

然后获取宽度,再创建一个矩形,矩形的大小就是文字的长度,获取矩形的长度,如果矩形的长度长于文字展示的长度,说明溢出,就要进行一些其他的操作了。

(创建矩形来对比是判断是否溢出的核心,这边结合了elementui如果其他的框架代码不同,思路应该是一样的)

这边其他的操作就是修改elementui的tooltips的disabled。

我是先创建一个和list等长的,全是true的数组,然后鼠标进入检查到溢出了就把这个数组相应的值改为false,这样就会展示出tooltip。

注:

1、使用splice修改数组才能响应式

2、给el-tooltip加一个key,所以在数组对应位置的值改为false以后key也改了,页面重新渲染tooltip就出现了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值