javascript - 使用 CSS 变换缩放 <div> 容器

标签 javascript html css transform

在元素中bigpicture.js/live demo ,我在缩放时替换每个元素(通过移动它们并更改它们的字体大小)。它有效。

现在我想测试 CSS' nice transform: scale(...);功能代替。

在接下来的测试中,我想:

  • 放大整个<div id="container">当用户点击时。
  • 当用户按住 CTRL 并单击时缩小。

问题是无论我们点击哪里,缩放都是以同样的方式完成的。 如何缩放点击的点(好像它已经适用于我当前的 bigpicture.js 实现)。

var container = document.getElementById("container"), wrapper = document.getElementById("wrapper");
var zoom = 1;

wrapper.onclick = function (e) {
    zoom *= e.ctrlKey ? 1/1.2 : 1.2;    
    container.style.transform = "scale(" + zoom + ")";
}
<style>
#wrapper { position:absolute; top:0px; left:0px; width:1000px; height:600px; background-color: #AAAABB; }
#container { position:absolute; top:100px; left:100px; width:600px; height:400px; background-color: grey; transition-duration: 0.3s; }
#text { position:absolute; top:100px; left:100px; font-size:30px; }
</style>
<div id="wrapper">
  <div id="container">
    <div id="text">Test<div>
  </div>
</div>  

重要提示:您绝对需要进入整页以了解它的内容。

注意:我用 transform-origin 做了一些尝试, 不成功。

最佳答案

您还需要将当前缩放应用于屏幕坐标:

var container = document.getElementById("container"), wrapper = document.getElementById("wrapper"), marker = document.getElementById("marker");
var zoom = 1;

wrapper.onclick = function (e) {
    var x = e.clientX - container.getBoundingClientRect().left;
    var y = e.clientY - container.getBoundingClientRect().top;
    console.log(x,y)
    x /= zoom;
    y /= zoom;
    zoom *= e.ctrlKey ? 1/1.2 : 1.2;
    container.style.transform = "scale(" + zoom + ")";
    container.style.transformOrigin = x+"px "+y+"px";
    marker.style.top = (y-2)+'px';
    marker.style.left = (x-2)+'px';
}
<style>
#wrapper { position:absolute; top:0px; left:0px; width:1000px; height:600px; background-color: #AAAABB; }
#container { position:absolute; top:100px; left:100px; width:600px; height:400px; background-color: grey; transition-duration: 0.3s; }
#text { position:absolute; top:100px; left:100px; font-size:30px; }
#marker { position:absolute; width:4px; height:4px; background-color:red; }
</style>
<div id="wrapper">
  <div id="container">
    <div id="marker"></div>
    <div id="text">Test<div>
  </div>
</div>  

关于javascript - 使用 CSS 变换缩放 <div> 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27461172/

相关文章:

CSS3 label标签朝右使用位置或:after

html - 移动联系表

javascript - 参数不应该为空

javascript - 从另一个 HTML 文件 Bootstrap 弹出窗口数据

javascript - 为什么在 jQuery 中传递给我的回调函数的参数不断变化?

html - 从本地网页运行程序

html - Flexbox 垂直文本对齐

javascript - 修复 Bootstrap 下拉菜单的行为

javascript - 如何在 jQuery/HTML 中具有多列的 ListView 上使用数据过滤器属性?

css - 溢出:滚动 - 侧滚动关闭页面