文字超过div容器的高度显示...

发布时间 2023-05-26 15:10:07作者: wangnima666

我们一般遇到的场景为超过一行或者2行,3行等等显示...,但是对于div容器 如果想实现超过div容器的高度才显示...,这该怎么实现呢

我们知道,当div只有内部只有一个文字时 此时空间足够,2个也是...那么第n个呢,所以思路来了,我们可以一直计算下去,知道超过容器高度为止

代码如下:

<html>
<body>
<div class="change" >改变窗体大小</div>
<div id="wocao" style="width:100px;height:100px;">
   <span class="inner"></span>
 </div>
</body>
<style>
.change {
  
}
  #wocao {
     font-size:20px;
     width:100px;
     height:100px;
     border:1px solid red;
     word-break:break-word;
  }
</style>
<script>

let text = 'jijilsckcmkcscsjjfjsijdsijdisjdisjdijdisji'
let finaltext = text+text+text+text
let parent = document.getElementById('wocao')
let dom = document.getElementsByClassName('inner')[0]
    
async function overflowhandler() {
dom.style.visibility = 'hidden'
  for(let j=0;j<finaltext.length+1;j++) {
    let subtext =  finaltext.slice(0,j) +'...'
    dom.innerHTML = subtext
    let isdone = false
    let p =await new Promise((resolve,reject)=>{
       setTimeout(()=>{
         let sizeinfo = dom.getBoundingClientRect()
         let parentsizeinfo = parent.getBoundingClientRect()
         if(parentsizeinfo.height<sizeinfo.height) {
           resolve('done')
         }else {
           resolve('undone')
         }
       })
    })
  console.log(p)
    // 刚好满足超过
    if(p=='done'){
     // 结束 值为上一次的
     let tx = finaltext.slice(0,j-1) +'...'
     dom.innerHTML = tx
      dom.style.visibility = 'visible'
     return;
    }
    // 最后一个的时候仍旧不超过 那说明能容纳全部
    if(j==finaltext.length&&p=='undone') {
         dom.innerHTML = finaltext
         dom.style.visibility = 'visible'
    }
  }
  
}
overflowhandler()
let change = document.getElementsByClassName('change')[0]
change.onclick = function (){
  let width = 100+100*Math.random();
  let height = 100+100*Math.random();
  parent.style.width = width+'px'
  parent.style.height = height+'px'
  setTimeout(()=>{
  overflowhandler()
  },10)
}
</script>
</html>

解释:我们先允许div换行显示,然后内部用span标签包裹,然后通过循环记录每次span占有的高度,然后与父div对比

如果超过了,那么我们取当前迭代的上一次,然后结束,如果最后一个仍旧没有超过,这以为着div容器能够完全容纳内容

不需要打点,最终我们在容器高度改变的时候 重新计算就好了耶,效果如下

cheers !!! ???????