【问题标题】:How to make continuous animations for elements with shorter animation duration's [GASP]如何为动画持续时间较短的元素制作连续动画 [GASP]
【发布时间】:2016-08-06 13:14:05
【问题描述】:

我有以下 GASP 动画:

$(function () {
    var tmax_options = {
      repeat: -1
    };

    var tmax_tl = new TimelineMax(tmax_options),
      tween_options_to = {
        css: {
          rotation: 360,
          transformOrigin: 'center center'
        },
        ease: Cubic.Linear,
        force3D: true
    };

// Last Argument is Position Timing.
// Use this argument to stagger the visibility of surrounding circles
tmax_tl.to($('svg > path'), 10, tween_options_to, 0)
  .to($('svg > #XMLID_26_'), 5, tween_options_to, 0)
  .to($('svg > #XMLID_23_'), 70, tween_options_to, 0)
  .to($('svg > #XMLID_20_'), 65, tween_options_to, 0);
});

FIDDLE HERE

现在我想在上面的动画中发生的是最外层的多边形应该旋转(它们是总共找到的)。所有 4 应以不同的速度旋转,并且应连续旋转而不会停止。

到目前为止,我的动画代码如下所示:

tmax_tl.to($('svg > path'), 10, tween_options_to, 0)
    .to($('svg > #XMLID_26_'), 5, tween_options_to, 0)
    .to($('svg > #XMLID_23_'), 70, tween_options_to, 0)
    .to($('svg > #XMLID_20_'), 65, tween_options_to, 0);

如您所见,持续时间不同:10,5,70,65。现在最长的动画不会停止,但较短的动画会停止,然后在某个点重新开始。我怎样才能阻止这个?即,我如何制作动画以使所有圆圈的旋转都是连续的而不停止?

【问题讨论】:

  • @AndréDion 你的男人!

标签: javascript jquery css gsap


【解决方案1】:

问题在于,只有在 TimelineMax 对象中的所有动画都停止时,GSAP 才会重新开始循环。因此,每个齿轮都需要一个 TimelineMax 对象:

$(() => {
    const tweenOptions = {
        css: {
            rotation: 360,
            transformOrigin: "center center"
        },
        ease: Linear.easeNone,
        force3D: true
    };
    const timelines = [];
    for (let i = 0; i < 4; ++i) {
        timelines.push(new TimelineMax({
            repeat: -1
        }));
    }
    timelines[0].to($("svg > path"), 10, tweenOptions, 0);
    timelines[1].to($("svg > #XMLID_26_"), 5, tweenOptions, 0)
    timelines[2].to($("svg > #XMLID_23_"), 70, tweenOptions, 0)
    timelines[3].to($("svg > #XMLID_20_"), 65, tweenOptions, 0);
});

此外,如果您希望动画的速度保持不变,请务必使用Linear.easeNone

您可以查看演示 here

【讨论】:

    【解决方案2】:

    要获得连续性的视觉效果,请选择ease: Power0.easeNone,。它只是旋转齿轮。

    对于不同的速度,你应该设置 4 个不同的TweenMax 动画。每个齿轮一个。并且每个都应该有repeat:-1的参数。

    $(function() {
      var 
        tween_options_to = {
          css: {
            rotation: 360,
            transformOrigin: 'center center'
          },
          ease: Power0.easeNone,
          force3D: true,
          repeat:-1
        };
    
    TweenMax.to($('svg path'), 2, tween_options_to, 0);
    TweenMax.to($('svg > #XMLID_26_'), 10, tween_options_to, 0);
    TweenMax.to($('svg > #XMLID_23_'), 7, tween_options_to, 0);
    TweenMax.to($('svg > #XMLID_20_'), 4, tween_options_to, 0);
    
    });
    

    这是一个工作示例:https://jsfiddle.net/gvczqhpo/4/

    为什么有4个不同的TweenMax

    时间线是一个时间线。想象它是一个line,它有一个起点和一个终点。它命令其中的元素在某个时间点以某种方式工作。

    你想要完成的不是一系列事件,而是一个无限的动画。所以我会说,在这里使用时间线是多余的。只需使用 4 种不同的动画即可;)

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2012-12-12
      相关资源
      最近更新 更多