gpt4 book ai didi

javascript - SVG 蛋变形动画

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:03:28 24 4
gpt4 key购买 nike

我想将一个简单的 SVG 路径变成另一个。我想使用 JavaScript 来控制何时发生这种情况。

这是我创建的 JSFiddle 的链接,作为我正在尝试做的事情的简化示例:http://jsfiddle.net/brentmitch/RqRjq/

这是示例使用的基本代码:

function makeEgg() {
var svgContainer = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
svgContainer.setAttribute("version", "1.1");
svgContainer.setAttribute("width", "142.308px");
svgContainer.setAttribute("height", "142.308px");
svgContainer.setAttribute("id", "curvecontainer");
svgContainer.setAttribute("x", "0px");
svgContainer.setAttribute("y", "0px");
var eggPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');
eggPath.setAttribute("id", "eggpath");
eggPath.setAttribute("d", "M126.308,83.154c0,39.297-32.718,56.154-55.154,56.154S16,122.451,16,83.154S50,0,71.154,0S126.308,43.856,126.308,83.154z");
eggPath.setAttribute("fill", "GoldenRod");
svgContainer.appendChild(eggPath);
document.getElementById('svgcontainer').appendChild(svgContainer);
}

function changeToArrow() {
var animateEggPath = document.createElementNS('http://www.w3.org/2000/svg', 'animate');
animateEggPath.setAttribute("id", "egganimation");
animateEggPath.setAttribute("xlink:href", "#eggpath");
animateEggPath.setAttribute("attributeType", "XML");
animateEggPath.setAttribute("attributeName", "d");
animateEggPath.setAttribute("from", "M126.308,83.154c0,39.297-32.718,56.154-55.154,56.154S16,122.451,16,83.154S50,0,71.154,0S126.308,43.856,126.308,83.154z");
animateEggPath.setAttribute("to", "M126.308,95.154c0,39.297-17.333-28.667-39.769-28.667S16,134.451,16,95.154S50,12,71.154,12 S126.308,55.856,126.308,95.154z");
animateEggPath.setAttribute("dur", "4s");
animateEggPath.setAttribute("fill", "freeze");
}

function resetToEgg() {
var animations = document.getElementById('egganimation');
document.getElementById('eggpath').removeChild(animations);
}

使用 SVG,它制作了一个鸡蛋,将其变形为箭头,然后通过移除动画节点将其重置。我遇到的问题是动画只能在第一次运行。当我尝试重置它并再次运行它时,它不再具有动画效果。它只是立即转变为箭头。我必须重新加载/刷新浏览器窗 Eloquent 能再次播放动画。

我知道 Raphael JavaScript 库非常适合制作此类动画,但我只想做一个简单的变形。我的访问者大多使用移动设备,因此我想避免加载一个库来做这个简单的动画。

最佳答案

动画在时间轴上运行。动画时间基本上从 0 开始,然后当您运行动画时它运行到 4 秒。当您删除并重新添加动画时,您不会重置时间线,因此动画从结束点 4 秒开始运行。您可以通过像这样调用 setCurrentTime 来重新启动时间线...

function resetToEgg() {
var animations = document.getElementById('egganimation');
document.getElementById('eggpath').removeChild(animations);
curvecontainer.setCurrentTime(0);
document.getElementById('arrowbutton').style.display = "inline";
document.getElementById('resetbutton').style.display = "none";
}

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

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