【发布时间】:2021-08-12 17:43:41
【问题描述】:
所以我有一个具有缩放功能的图像查看器,它通过transform: scale() 属性工作。
使用transition: transform .3s 动画缩放没有问题。
为了使鼠标滚轮上的缩放转到鼠标滚轮指向的位置,我计算了设置新原点的正确位置,但是当我设置它时,它只是跳到那里而没有动画。
我尝试过的:
- 为
transform-origin属性设置transition→ 不起作用 - 在JS中手动使用
setTimeout并慢慢将transform-origin设置在正确的位置→播放缩放动画然后跳转
有没有办法一次性为transform: scale() 和transform-origin 设置动画?
欺骗
由于最后一个问题已作为 How to have multiple CSS transitions on an element? 的副本关闭,这里是一个 sn-p,向您表明这不是我的问题。
const img = document.querySelector('#container img');
let on = true;
const toggleEffect = () => {
if(on) {
img.style.transform = 'scale(2.5)';
img.style.transformOrigin = '80% 80%';
} else {
img.style.transform = 'scale(1.4)';
img.style.transformOrigin = '20% 20%';
}
on = !on;
};
#container {
width: 500px;
height: 300px;
overflow: hidden;
background-color: red;
}
#container img {
height: 100%;
width: 100%;
object-fit: contain;
transform: scale(1.4);
transform-origin: 20% 20%;
transition: transform .3s, transform-origin .3s;
}
<div id="container">
<img src="https://images.unsplash.com/photo-1482066490729-6f26115b60dc?ixlib=rb-1.2.1&auto=format&fit=crop&w=2004&q=80"/>
</div>
<button onclick="toggleEffect()">Toggle</button>
【问题讨论】:
标签: javascript html css