vue、element-ui使用el-tooltip判断文本是否溢出

本文介绍了如何在前端实现文本单行显示,当内容溢出时使用省略号并配合鼠标悬停时的tooltip显示全部内容。作者提到使用scrollWidth和clientWidth判断溢出,并强调了CSS对正确计算的重要性。
摘要由CSDN通过智能技术生成

1.需求:需要实现文本单行显示,超出时,使用省略号,划过该文本时使用tooltip显示全部文本。需要考虑数据是由接口动态获取,只有溢出文本鼠标滑过时显示全部文本,没有溢出的则不需要。

2.实现:

第一步:首先要判断文本是否溢出

这里网上可以找到很多方法,我是用scrollWidth去拿到实际文本长度,跟clientWidth文本可视宽度作比较。需要注意的是我遇到了一个问题,即

判断文本溢出之前一定要使用单行文件溢出显示省略号的css,并且要加在tooltip内部要溢出隐藏的span上,不然scrollWidth和clientWidth会一直为0

 onMouseOver(event) {
      const ev = event.target;
      const evWeight = ev.scrollWidth;
      const contentWidth = ev.clientWidth;
      if (evWeight > contentWidth) {
        this.isShowTooltip = false;
      } else {
        this.isShowTooltip = true;
      }
    },
    <el-row v-for="(row, rowIndex) in djnumberOfRows" :key="rowIndex">
              <el-col
                v-for="(column, colIndex) in row.length"
                :key="colIndex"
                :span="
                  calculateSpan(row, rowIndex, djnumberOfRows.length, colIndex)
                "
              >
                <template v-if="row[colIndex]">
                  <el-form-item class="radioClass" :label="row[colIndex].name">
                    <el-tooltip
                      :content="djForm ? djForm[row[colIndex].fieldskey] : ''"
                      :disabled="isShowTooltip"
                      placement="top"
                    >
                      <div
                        @mouseover="onMouseOver($event)"
                        style="
                          white-space: nowrap;
                          overflow: hidden;
                          text-overflow: ellipsis;
                        "
                      >
                        {{ djForm ? djForm[row[colIndex].fieldskey] : '' }}   //之前我在这里包了一层span,是错误的,会导致拿到的不准,有的是0,有的地方不是,因为span有范围。为什么会在这加一层span,用div,因为省略号
                      </div>
                    </el-tooltip>
                  </el-form-item>
                </template>
              </el-col>
            </el-row>

补充:(未试)

methods: {
  onMouseOver (str) { // 内容超出,显示文字提示内容
      const tag = this.$refs[str]
      const parentWidth = tag.parentNode.offsetWidth // 获取元素父级可视宽度
      const contentWidth = tag.offsetWidth // 获取元素可视宽度
      this.isShowTooltip = contentWidth <= parentWidth

  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值