【问题标题】:SVG Rotate Element While Animating svgjsSVG在动画svgjs时旋转元素
【发布时间】:2017-11-19 03:35:02
【问题描述】:

我现在正在使用 Javascript、Jquery、SVG 和 SVG.js。我想在动画制作时围绕其原点旋转一个圆圈。动画正在做同样的事情,所以我可以使用某种步进函数,但我找不到任何东西。问题是我目前的解决方案动画很卡,它必须停止动画,旋转圆圈,然后重新开始。这依次具有太多延迟并导致摆动运动。这是设置代码:

var draw = SVG('svg');
var innerCircle = draw.group().addClass("atom0g0").move(100,100);
innerCircle.circle(100).addClass("atom0p0").center(0, 0).attr({ fill: "white", stroke: "blue", "stroke-dasharray": "10" });
innerCircle.animate(6000).rotate(360, 0, 0).loop();

我现在需要更改的执行代码在这里:

var elms = $(".atom"+atom.atom_id.toString()+"g0");
for (var j=0; j < elms.length; j++) {
  // this is the problem, too much of a delay, therefore causing a wiggle motion.
  elms[j].instance.animate().stop();
  elms[j].instance.rotate(step, 0, 0);
  elms[j].instance.animate(6000).rotate(360, 0, 0).loop();
}

这是我现在正在开发的 CodePen:Current VersionBugged Version

简而言之(如果您只是在这里跳到最后)我需要在不完全停止圆圈动画的情况下旋转一个圆圈。我知道play()pause() 不起作用,因为我不能在动画暂停时调用rotate()

【问题讨论】:

  • 如果您添加包含 HTML、CSS 和 JS 的 CodePen 示例,您可以更好地描述您的问题,以便人们可以快速回答。
  • @BhaveshB 我为你添加了 CodePen 链接,谢谢。
  • 我还需要澄清一下,你是想让红球在它的路径也在旋转的同时绕着黑色旋转,还是你想让红球在绕着黑色旋转的同时也绕着它自己旋转?
  • 您的 CodePen 至少在我测试它的 Chrome 和 Firefox 中不起作用。请提供一个可用的 CodePen,然后有人可以帮助你。
  • 它可能不是动画,我之前在处理它时偶然注释掉了那条线。它适用于 Chrome 对我来说很好。试试这个,codepen.io/Piist300/pen/LOqvZo

标签: javascript jquery animation svg svg.js


【解决方案1】:

接受的答案:

尝试用另外一个元素包裹你的元素并分别为它们设置动画。


其中一种解决方案是更改此行:

elms[j].instance.rotate(Math.random()*360, 0, 0);

进入那个:

elms[j].instance.animate(1000).rotate(Math.random()*360, 0, 0);

这样旋转就会被动画化。

Codepen:https://codepen.io/soentio/pen/POVLYV


使用 css 进行转换的其他可能解决方案。通过添加以下行:

#svg > g {
    transition: transform 1s ease-in-out;
}

您确保每当一个组(即您的 svg 根节点的直接子节点)旋转时,它都会平滑地进行动画处理。

代码笔:https://codepen.io/soentio/pen/gXqqNQ

这种方法的优点是,无论您的旋转是什么,浏览器都会选择最短路径。


奖金: 我相信优势 od css 动画 (;-)) 并受到您的代码的启发,使您成为了一个小小的 codepen 小提琴:https://codepen.io/soentio/pen/YEBgyj 也许您的目标只能通过 css 来实现?

【讨论】:

  • 这些很有趣,但不幸的是它们并没有解决我的问题。问题是,当我尝试通过animate().stop(); 停止动画时,需要几秒钟才能停止动画,然后再旋转并再次播放动画。而且我知道播放,暂停不起作用,因为旋转不适用于暂停的动画。所以我需要找到一种在不完全停止动画的情况下旋转圆圈的方法。
  • @PrestonHager 你不能通过添加一些容器并与内部内容分开动画来解决它吗?
  • 这是一个非常简单的解决方案,而且很有效。为什么我没有想到呢?非常感谢!在将问题发布到此处之前,我已经尝试了 3 天的解决方案,而且一直就是这么简单!再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2022-08-13
  • 2011-03-01
  • 2013-10-26
  • 2023-03-31
  • 2011-07-24
相关资源
最近更新 更多