vue3-溢出多行中间省略号

<template>
  <div class="singleBox" :class="className">{{curtStr}}</div>
</template>

<script lang="ts" setup>
defineOptions({ name: 'singleLine' })
import { ref, onMounted,onUnmounted , reactive } from 'vue'
const props = defineProps({
    str:{
        type: String,
        default:''
    },
    className:{
        type: String,
        default:''
    },
    lineNum:{
        type: Number,
        default: 2
    }
});
const defaultStr = props.str,refName = props.className
let maxLine = props.lineNum || 2
let curtStr = ref(props.str)
const setText=()=>{
    if(!refName) return
    let textContainers = document.getElementsByClassName(refName) ;
    if(!textContainers.length) return
    let newDom =  textContainers[0] as HTMLElement
    newDom.innerHTML = defaultStr
    const maxHeight = parseInt(window.getComputedStyle(newDom).lineHeight)* maxLine;
    if (newDom.offsetHeight > maxHeight) {
        let startIndex = 5
        let endStr = defaultStr.substring(defaultStr.length - 7)
        newDom.innerHTML = defaultStr.substring(0,startIndex)+'...'+ endStr
        while(newDom.offsetHeight <= maxHeight){
            startIndex= startIndex+1
            newDom.innerHTML = defaultStr.substring(0,startIndex)+'...'+ endStr
        }
        if(newDom.offsetHeight > maxHeight){
            startIndex= startIndex-1
            newDom.innerHTML = defaultStr.substring(0,startIndex)+'...'+ endStr
        }
    }
}
onMounted(() => {
    setText()
    window.addEventListener('resize', setText);
})
onUnmounted(() => {
  window.removeEventListener('resize', setText);
});
</script>

<style lang="scss" scoped>
.singleBox{
    width: 100%;
    overflow: unset; 
    text-overflow: unset; 
    white-space: unset;
}
</style>
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值