事实证明 2023-06-05 15:20 采纳率: 50%
浏览 10

关于#html#的问题,如何解决?

目前问题就是放大div后 滚动内容 会出现左侧上侧的内容缺失问题 如果加上transform-origin :top left 缺失问题可以解决 但是效果不好 通过监测放大后手动调整显示区域是可以 但是也会存在抖动问题


<div  style="width: 600px;height:600px; overflow: auto;"><div  style="transform: scale(4);"><img  src="https://img1.baidu.com/it/u=2494940079,2555791724&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=725" alt="" style=" top: 0px; left: 0px;  object-fit: cover;" crossorigin="anonymous"></div></div>

  • 写回答

1条回答 默认 最新

  • 梦幻编织者 2023-06-05 15:36
    关注

    使用CSS的clip属性来定义可视区域,避免出现缺失问题。例如:

    .container {
      width: 600px;
      height: 600px;
      overflow: auto;
      position: relative;
    }
    
    .content {
      position: absolute;
      top: 0;
      left: 0;
      clip: rect(0px, 600px, 600px, 0px);
      transform: scale(4);
    }
    
    <div class="container">
      <div class="content">
        <img src="https://img1.baidu.com/it/u=2494940079,2555791724&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=725" alt="">
      </div>
    </div>
    

    使用JavaScript来动态计算可视区域的位置和大小,避免出现缺失和抖动问题。例如:

    const container = document.querySelector('.container');
    const content = document.querySelector('.content');
    const img = document.querySelector('img');
    
    const scale = 4;
    const width = img.naturalWidth;
    const height = img.naturalHeight;
    
    container.style.width = `${width}px`;
    container.style.height = `${height}px`;
    content.style.transform = `scale(${scale})`;
    
    function updateClip() {
      const rect = container.getBoundingClientRect();
      const clipX = -rect.left / scale;
      const clipY = -rect.top / scale;
      const clipWidth = rect.width / scale;
      const clipHeight = rect.height / scale;
      content.style.clip = `rect(${clipY}px, ${clipX + clipWidth}px, ${clipY + clipHeight}px, ${clipX}px)`;
    }
    
    updateClip();
    container.addEventListener('scroll', updateClip);
    window.addEventListener('resize', updateClip);
    

    这个例子中,我们使用了getBoundingClientRect()方法来获取容器的位置和大小,然后根据缩放比例计算出可视区域的位置和大小,并设置clip属性来定义可视区域。同时,我们还绑定了scroll和resize事件,实时更新可视区域的位置和大小,避免出现抖动和缺失问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月5日