gpt4 book ai didi

javascript - CSS Scale and Transform 导致重叠

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:03 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com