实现内容未超出盒子宽度时正常展示,超出后省略展示,hover展示全部

项目种有许多内容需要展示,要适配不同分辨率下数据展示完整,且不想在数据内容宽度较短时就hover展示,封装一个内容未超出盒子宽度时正常展示,超出后省略展示,hover展示全部的组件来进行数据展示。

在component文件夹下创建 OverflowTooltip/index.vue:

<template>
  <div :id="id" class="overflow-tooltip" :style="{maxWidth:maxWidth}">
    <el-tooltip :content="content" placement="bottom-start" v-if="title.length>0">
      <span>{{ content }}</span>
    </el-tooltip>
    <span v-if="title.length == 0">{{ content }}</span>
    
  </div>
</template>
 
<script setup name="OverflowTooltip">
  const props = defineProps({
     content: [String, Number, Boolean],
      maxWidth: {
      	type: String
      }
  })
  const title = ref('')
  const id = ref(Math.random().toString(36).slice(2))
  onMounted(()=> {
    const el = document.getElementById(id.value)
    const elComputed = document.defaultView.getComputedStyle(el, '')
    const padding =
      parseInt(elComputed.paddingLeft.replace('px', '')) +
      parseInt(elComputed.paddingRight.replace('px', ''))
 
    const range = document.createRange()
    range.setStart(el, 0)
    range.setEnd(el, el.childNodes.length)
    const rangeWidth = range.getBoundingClientRect().width
 
    if (
      rangeWidth + padding > el.offsetWidth ||
      el.scrollWidth > el.offsetWidth
    ) {
      title.value = props.content
    }
  })
</script>
 
<style lang="scss" scoped>
.overflow-tooltip {
  display: inline-block;
  width: 100%;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  line-height: 1;
  vertical-align: middle;
  .el-tooltip__trigger{
  display: inline-block;
  width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
}
</style>

在页面使用该组件:

<OverflowTooltip :content="name" max-width="calc(100% - 180px)" />
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值