【问题标题】:Javascript Snap.svg: Rotation animation goes the long way around at 270 degreesJavascript Snap.svg:旋转动画在 270 度左右旋转很长一段路要走
【发布时间】:2019-05-06 08:43:32
【问题描述】:

我遇到了 snap.svg 的问题,每当我在 269 到 270 度之间设置旋转动画时,整个物体都会围绕整个圆圈旋转,而不是前进一个度数。这是重现问题的最小代码 sn-p:

function testRotation() {
  var draw = Snap('#test');
  var box = draw.rect(0, 0, 100, 161.5);
  var rotation = 268;
  var increment = 1;
  var transform = 't200,200r'+rotation+',50,80.75';
  console.log(transform)
  box.attr({
    fill: '#000000',
    transform: transform});

  function rotate() {
    if (rotation > 271) increment = -1;
    if (rotation < 269) increment = 1;
    rotation += increment;
    var transform = 't200,200r'+rotation+',50,80.75';
    console.log(rotation);
    box.animate({transform: transform}, 1000);
    setTimeout(rotate, 1000);
  }

  setTimeout(rotate, 1000)
}

这是一个 JSFiddle 版本,您可以在其中看到它的实际效果:http://jsfiddle.net/qsmzexut/2/

它从 268 度开始,然后每秒将角度增加 1 度。当它从 269 到 270 时,它会一路转来转去。当它达到 272 时,它会回落,然后回升等等。正如您所看到的,这种行为在两个方向上都存在。

有什么方法可以避免这种行为?我希望能够旋转一个度数而不是让它围绕整个圆圈摆动!谢谢。

【问题讨论】:

  • 您仍然可以使用 JSFiddle。您只需要在“资​​源”部分添加指向 Snap 的链接。 Like this
  • 好的,谢谢!现在开始工作了:jsfiddle.net/qsmzexut/2
  • @prismofeverything 我不确定我是否理解您正在寻找的行为。您是否试图使矩形在 268 和 272 的角度之间来回摆动?像抖动影响?
  • @flybear 在 268 和 272 之间旋转只是失败的演示。它应该一次平稳地旋转 1 度,但在从 269 到 270 时,它会完全旋转。

标签: javascript animation svg snap.svg


【解决方案1】:

为了每次移动一点 - rotation = rotation - increment;

【讨论】:

  • 嘿@MorLavender,我已经在做rotation += increment,当增量为1或-1时相当于你的建议。您的意思是否超出此范围?
  • 这里您使用的是负值(如-1)的“+=”运算符,我认为这就是区别所在。 ''在 js fiddle 中添加解决方案 - 这就是你想要得到的吗? jsfiddle.net/qsmzexut/6
  • 不,您没有旋转超过 270 度标记。如果您等待足够长的时间,您将看到小提琴的行为:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 2023-04-04
  • 2016-03-27
相关资源
最近更新 更多