gpt4 book ai didi

javascript - 流畅的 SVG 动画

转载 作者:行者123 更新时间:2023-11-29 10:31:26 25 4
gpt4 key购买 nike

我正在尝试使用给定参数 rotateX 和 rotateY 刷新动画:

$(document).ready(function() {
var svg = document.getElementById("DC");
var x = 10;
var y = 0;
for (j = 0; j<8 ; j++) {
svg.setAttribute('style', 'transform: perspective(30em) rotateX(' + x + 'deg) rotateY(' + y + 'deg) scale(0.6, 0.6); perspective: 30em;');
x = x + 10;
}
});

但是没有用。如何流畅刷新动画?

这是 HTML 代码:

<body><svg id="DC" version="1.0" viewBox="0 0 500 408" class="sim" x="0px" y="0px" width="100%" height="100%" style="transform: perspective(30em) rotateX(0deg) rotateY(0deg) scale(0.6, 0.6); perspective: 30em;"><style></body>

最佳答案

问题在于,每次执行动画时,都需要给浏览器一个绘制变化的机会。你没有那样做。您的 for 循环只是不断地改变 style 属性,并且永远不会将控制权返回给浏览器。它永远没有机会更新页面。

有几种方法可以解决这个问题。曾几何时,通常使用 window.setTimeout() 调用返回浏览器并让它调用您的代码以更新动画。现在首选的方式是 requestAnimationFrame()打电话。

var svg = document.getElementById("DC");
var x = 10;
var y = 0;

function step(timestamp)
{
svg.setAttribute('style', 'transform: perspective(30em) rotateX(' + x + 'deg) rotateY(' + y + 'deg) scale(0.6, 0.6); perspective: 30em;');
x = x + 10;
window.requestAnimationFrame(step);
}

window.requestAnimationFrame(step);
svg {
background-color: red;
}
<body>
<svg id="DC" version="1.0" viewBox="0 0 500 408" class="sim" x="0px" y="0px" width="100%" height="100%" style="transform: perspective(30em) rotateX(0deg) rotateY(0deg) scale(0.6, 0.6); perspective: 30em;"></svg>
</body>

此处动画的每一步都在 step() 函数中计算。然后在你从函数返回之前,你必须再次调用 requestAnimation() 来让它再次调用 step()

最后的调用是开始播放开头的动画。

关于javascript - 流畅的 SVG 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45180257/

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