A. *_*Lau 35 html javascript css jquery css3
所以我有一个容器,我想扩大和缩小(放大和缩小),但也有扩展/收缩形式占用空间而不是只是重叠其他东西.
有一个图像,其中有absolute
div放置在坐标中,它们必须在上下调整时保持它们的相对位置(因此我为什么使用比例).
var b = document.getElementById("outer");
var scale = 1;
function increase() {
scale += 0.1
b.style.transform = `scale(${scale})`;
}
function decrease() {
scale -= 0.1
b.style.transform = `scale(${scale})`;
}
Run Code Online (Sandbox Code Playgroud)
#outer {
overflow-x: auto position: relative;
transform-origin: left top;
}
.pointer {
width: 20px;
height: 20px;
background-color: orange;
position: absolute;
}
#a1 {
top: 50px;
left: 150px;
}
#a2 {
top: 150px;
left: 50px;
}
#a3 {
top: 250px;
left: 550px;
}
Run Code Online (Sandbox Code Playgroud)
<div>
<button onclick="increase()">Increase</button>
<button onclick="decrease()">Decrease</button>
</div>
<div id=outer>
<img src="http://via.placeholder.com/600x350" />
<div id="a1" class='pointer'>
</div>
<div id="a2" class='pointer'>
</div>
<div id="a3" class='pointer'>
</div>
</div>
<div>
please don't cover me
</div>
Run Code Online (Sandbox Code Playgroud)
宁可没有第三方库(jQuery旁边)但可能会考虑.
kuk*_*kuz 21
CSS3 scale
过渡就是这样.不幸的是,缩放会与其他元素重叠,因为它通过创建新的堆叠上下文(基本上将其所有内容相对于容器放置)将容器的内容从流中取出- 请参阅相关的文档描述:
如果属性的值不是none,则将创建堆叠上下文.
资料来源:MDN
请参阅下面的演示,通过暴力扩展所有元素:
var b, scale = 1, offset, pointers;
window.onload = function() {
b = document.getElementById("outer");
offset = b.getBoundingClientRect();
pointers = Array.prototype.map.call(b.querySelectorAll('.pointer'), function(e) {
return {
el: e,
offset: e.getBoundingClientRect()
}
});
}
function increase() {
scale += 0.1;
scaleIt();
}
function decrease() {
scale -= 0.1;
scaleIt();
}
function scaleIt() {
b.style.width = scale * offset.width + 'px';
b.style.height = scale * offset.height + 'px';
Array.prototype.forEach.call(pointers, function(e) {
e.el.style.width = scale * e.offset.width + 'px';
e.el.style.height = scale * e.offset.height + 'px';
e.el.style.top = scale * e.offset.top + 'px';
e.el.style.left = scale * e.offset.left + 'px';
});
}
Run Code Online (Sandbox Code Playgroud)
#outer {
/*overflow-x: auto;*/
position: relative;
transform-origin: left top;
}
.pointer {
width: 20px;
height: 20px;
background-color: orange;
position: absolute;
}
#outer > img {
height: 100%;
}
#a1 {
top: 50px;
left: 150px;
}
#a2 {
top: 150px;
left: 50px;
}
#a3 {
top: 250px;
left: 550px;
}
Run Code Online (Sandbox Code Playgroud)
<div>
<button onclick="increase()">Increase</button>
<button onclick="decrease()">Decrease</button>
</div>
<div id=outer>
<img src="http://via.placeholder.com/600x350" />
<div id="a1" class='pointer'>
</div>
<div id="a2" class='pointer'>
</div>
<div id="a3" class='pointer'>
</div>
</div>
<div>
please don't cover me
</div>
Run Code Online (Sandbox Code Playgroud)
我尝试了它的宽度和高度,我认为它将以你想要的方式工作,添加一个小动画,你可以使用它.
var b = document.getElementById("outer");
var b_width = document.getElementById("outer").offsetWidth;
var b_height = document.getElementById("outer").offsetHeight;
function increase()
{
b_width += 10
b_height += 10
b.style.width = b_width+"px";
b.style.height = b_height+"px";
}
function decrease()
{
b_width -= 10
b_height -= 10
b.style.width = b_width+"px";
b.style.height = b_height+"px";
}
Run Code Online (Sandbox Code Playgroud)
#outer {
background-color: red;
padding: 1em;
height: 80px;
width: 80px;
transform-origin: left top;
}
#inner {
background-color: yellow;
height: 50px;
width: 100%;
}
Run Code Online (Sandbox Code Playgroud)
<div>
<button onclick="increase()">Increase</button>
<button onclick="decrease()">Decrease</button>
</div>
<div id=outer>
<div id=inner>
</div>
</div>
<div>
please don't cover me
</div>
Run Code Online (Sandbox Code Playgroud)
编辑:抱歉冲了过来,我的意思是更新容器
你可以,添加一个容器.存储此容器的初始大小.现在,当您在内部元素中缩放时,将容器宽度/高度更新为相同的比率.
var a = document.getElementById("outer-wrapper");
var b = document.getElementById("outer");
var scale = 1;
var aWidth = a.offsetWidth;
var aHeight = a.offsetHeight;
function increase()
{
scale += 0.1
b.style.transform = `scale(${scale})`;
a.style.width = `${scale * aWidth}px`;
a.style.height = `${scale * aHeight}px`;
}
function decrease()
{
scale -= 0.1
b.style.transform = `scale(${scale})`;
a.style.width = `${scale * aWidth}px`;
a.style.height = `${scale * aHeight}px`;
}
Run Code Online (Sandbox Code Playgroud)
#outer {
position: relative;
transform-origin: left top;
}
.pointer {
width: 20px;
height: 20px;
background-color: orange;
position: absolute;
}
#a1 {
top: 50px;
left: 150px;
}
#a2 {
top: 150px;
left: 50px;
}
#a3 {
top: 250px;
left: 550px;
}
Run Code Online (Sandbox Code Playgroud)
<div>
<button onclick="increase()">Increase</button>
<button onclick="decrease()">Decrease</button>
</div>
<div id="outer-wrapper">
<div id="outer">
<img src="http://via.placeholder.com/600x350" />
<div id="a1" class='pointer'>
</div>
<div id="a2" class='pointer'>
</div>
<div id="a3" class='pointer'>
</div>
</div>
</div>
<div>
please don't cover me
</div>
Run Code Online (Sandbox Code Playgroud)