图片手动缩放

可手动调整图片大小,并实时更新记录图片宽高。
needRat 控制是否按图片原本尺寸缩放

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
  .resizeImg{
    width: 100%!important;
    height: 100%!important;
  }
  .resizeDiv{
    margin: 50px auto;
    font-size: 0;
    resize: both;
    overflow: hidden;
    width: 200px; 
    /* 初始宽度 */
    max-width: 800px;
    max-height: 800px;
    border: 1px solid #ccc;
  }
</style>
</head>
<body>
  <div  class="resizeDiv" >
    <img class="resizeImg" src="https://ts1.cn.mm.bing.net/th?id=OIP-C.7KW5GT7NQ8yUGlBbCHEm0gHaNK&w=187&h=333&c=8&rs=1&qlt=90&o=6&pid=3.1&rm=2">
  </div>
<script>
  let needRat = true;// 是否等比缩放
 
  let fn = ()=>{
    document.querySelectorAll('.resizeImg').forEach(v=>{
      if(!v.style.width || !needRat){
        v.style.width = v.width + 'px';
        v.style.height = v.height + 'px';
        if(needRat){
          v.style.objectFit = 'contain';
        }else{
          v.style.objectFit = 'fill'
        }
      }else{
        v.style.objectFit = 'contain';
      	let rat = v.naturalHeight/v.naturalWidth;  
        if(v.height/v.width > rat){
          v.style.width = v.width + 'px';
          v.style.height = Math.round(v.width*rat) + 'px';
          v.parentElement.width = v.width + 'px';
          v.parentElement.style.height = Math.round(v.width*rat) + 'px';
        }else{
          v.style.height = v.height + 'px';
          v.style.width = Math.round(v.height/rat) + 'px';
          v.parentElement.style.height = v.height + 'px';
          v.parentElement.style.width = Math.round(v.height/rat) + 'px';
        }
      }
    })
  }
  let  timer;
  const resizeObserver = new ResizeObserver((entries) => { 
    if(timer){
      clearTimeout(timer)
    }
    timer =  setTimeout(() => {
        fn()
      }, 800)
  })
  resizeObserver.observe(document.querySelector(`.resizeDiv`))
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值