代码之家  ›  专栏  ›  技术社区  ›  Fabian Tjoe A On

tweenmax/gsap交错原始数组值

  •  0
  • Fabian Tjoe A On  · 技术社区  · 6 年前

    假设下面的数组只有数字:

    [0, 0, 0, 0]

    [40, 50, 75, 80]

    如何使用交错/循环(使用gsap)从第一个插值到第二个插值?(令人震惊的是,我的意思是,先做第一件事,然后再拖延一段时间,再做下一件事)。

    注意:我已经将单个数字值转换为对象,以便gsap可以使用它们(所以 [{y: 0}, {y: 0}] 等等

    1 回复  |  直到 6 年前
        1
  •  0
  •   Fabian Tjoe A On    6 年前

    在GSAP论坛上回答了以下问题:

    https://greensock.com/forums/topic/18692-interpolating-using-staggerto-from-one-array-w-values-to-the-next/

    为了能够在数组中的单个值(在本例中是一个数字)之间进行插值,我必须为每个值创建一个类似时间线的新对象

    var a = [0, 0, 0, 0];
    
    staggerArray(a, [10,20,30,40], {duration:1, stagger:0.5, round:true});
    
    //vars accepts: duration, stagger, round, as well as any typical vars for TimelineMax (like onComplete, onUpdate, repeat, yoyo, etc.)
    function staggerArray(start, end, vars) {
      var tl = new TimelineMax(vars),
          proxy = {},
          duration = vars.duration || 0,
          stagger = vars.stagger || 0,
          proxyUpdate = function(original, proxy, i) {
            return function() {
              original[i] = proxy[i];
            };
          },
          v, i;
      for (i = 0; i < start.length; i++) {
        proxy[i] = start[i];
        v = {};
        v[i] = end[i];
        v.onUpdate = proxyUpdate(start, proxy, i);
        if (vars.round) {
          v.roundProps = i + "";
        }
        tl.to(proxy, duration, v, stagger * i);
      }
      return tl;
    }