【发布时间】:2019-01-12 01:34:28
【问题描述】:
在 HTML 页面中,我尝试使用 CSS 转换比例属性来实现缩放功能。在 HTML 页面中,我有更多的 div 元素,所有元素都使用绝对位置技术放置。然后我将 scale 属性应用于每个 div,我可以看到类似缩放,但所有 div 位置都相互折叠。那么如何在应用缩放后避免塌陷并保持彼此之间的间隙。
请建议我如何停止重叠以及如何根据 scale 属性计算每个元素的左侧和顶部位置。
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>
【问题讨论】:
-
如果您可以使用 CSS3 Flexbox 和 Grid 布局定位您的元素,浏览器将负责转换父 flex/grid 项目!或者您可以为
transform-origin设置一个点,并且相同。 -
只需将
.zoomable类添加到.containerdiv 而不是里面的类。
标签: javascript jquery html css css-transforms