javascript - CSS Scale and Transform 导致重叠

标签 javascript jquery html css css-transforms

在 HTML 页面中,我尝试使用 CSS 变换比例属性实现缩放功能。在 HTML 页面中,我有更多的 div 元素,所有元素都使用绝对位置技术放置。然后我将 scale 属性应用于每个 div,我能够看到像缩放一样但所有 div 位置都相互折叠。那么如何在应用缩放后避免崩溃并保持彼此之间的间隙。

请建议我如何停止重叠以及如何根据缩放属性计算每个元素的左侧和顶部位置。

var zoomScale = 1;

$(document).ready(function(){
  
  $("#zoomin").click(function(){
    if(zoomScale >=4 ) return;
    zoomScale = zoomScale +1;
    dispStatus();
    applyZoomIn();
  });

  function applyZoomIn(){
    $(".zoomable").each(function(index){
      var left = $(this).position().left;
      var top = $(this).position().top;
      var newLeft = left*zoomScale +"px";
      var newTop = top*zoomScale +"px";
      $(this).css('transform',' scale('+zoomScale+','+zoomScale+')')
    });
  }

  function dispStatus(){
    $("#displayStatus").text("Current Zoom Scale : "+zoomScale);
  }
  
  dispStatus();
  
});
#container{
     width:500px;
     height:500px;
     border:1px solid red;
     position:relative;
     overflow:auto;
}
.zoomable{
  background-color:lightblue;       
  border:1px solid red;
  width:100px;
  height:100px;
  position:absolute;
  transform-origin: top left;      
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<button id="zoomin"> Zoom In</button>
<div id="displayStatus"></div>
<br/><br/>
<div id="container">
   <div class="zoomable">First Div</div>
   <div class="zoomable" style="left:105px">Second Div</div>
</div>

JSFiddle Link

最佳答案

您可以将 .zoomable div 添加到另一个父级(称为 .inner-container)并向其添加缩放功能。这样 .container div 就不会缩放,而 zoomable div 会保持位置。

请参阅下面的代码段:

var zoomScale = 1;
$(document).ready(function(){
	 $("#zoomin").click(function(){
    if(zoomScale >=4 ) return;
    zoomScale = zoomScale +1;
    dispStatus();
    applyZoomIn();
  });

  function applyZoomIn(){
      $(".inner-container").css('transform',' scale('+zoomScale+','+zoomScale+')');
  }

 
  function dispStatus(){
   $("#displayStatus").text("Current Zoom Scale : "+zoomScale);
  }

  dispStatus();

});
    
    .zoomable{
      background-color:lightblue;       
      width:100px;
      height:100px;
      position:absolute;
      border:1px solid red;
    }
    #container{
    width:500px;
    height:500px;
    border:1px solid red;
    position:relative;
    overflow:auto;
    }
    .inner-container{
      transform-origin: top left; 
    }
   
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="zoomin"> Zoom In</button>

<div id="displayStatus"></div>
<br/><br/>

<div id="container">
  <div class="inner-container">
    <div class="zoomable">First Div
    </div>
    <div class="zoomable" style="left:105px">Second Div
    </div>
  </div>
</div>
<br/><br/>

也可以测试一下here

关于javascript - CSS Scale and Transform 导致重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54126115/

相关文章:

javascript - Bluebird 无极绑定(bind)链

javascript - 找不到预加载的图像 (emscripten)

jquery - IE jQuery 不透明度抗锯齿问题

javascript - jQuery 从选择框获取选定值不起作用

jquery-plugins - Jquery Change() 函数不起作用

html - 我可以使用 CSS 更改复选框的大小吗?

javascript - 如何在javascript中通过键从数组中删除元素?

javascript - 用自定义 javascript 全局命名空间替换窗口

javascript - angularjs中的单卡和多卡选择数据

javascript - 如何将动态创建的 div 附加到另一个动态创建的 div?