在另一个函数中将字符串作为参数传递时,GSAP js 函数标识符失败

GSAP js function identifier fails when passing string as parameter in another function

我一直在使用 GSAP 教程(下面的链接),并希望以此为基础制作一个功能

tl.from(img, 1, {y: -20, autoAlpha:0, ease: Bounce.easeOut})

所以我创建了这个

    // a = selector, b = duration, c = axis, d = offset, e = type of animation, f= easeOut/In

    // Problem occurs when passing c as either 'x'/'y' string

        function test(a,b,c,d,e,f){
    var tl=new TimelineLite;
    var img = $('img');
    var result = tl.from(a, b, c:d, ease:e+'.'+f});
return result;

    }

test('img',2,"y",-370,"Bounce","easeOut");

一旦运行,它就不起作用并且控制台中出现 0 个错误,如此处所示 http://weconnect.ro/stack/

如果在函数中我将 c 标识符修改为 y,它会像魔术一样运行: https://weconnect.ro/stack/working.html

我对 JS 还很陌生,我猜问题可能是 y 并不是一个真正的字符串(而且很确定这不是从函数标识符传递字符串的最佳方法)。

我也不知道我会如何 console.log(this) 因为 console.log(test('img',2,"y",-370,"Bounce","easeOut")); 输出 TL 函数的解构,我假设它是它的对象,这可能是构建它的方法。

如有任何澄清,将不胜感激,谢谢!

这是一个有点复杂的问题,需要对 JavaScript 语言中一些更令人困惑的部分进行一些解释。我会试着把它分解一下。

函数tl.from(img, 1, {y: -20, autoAlpha:0, ease: Bounce.easeOut}) 将一个对象({} 中的所有内容)作为第三个参数。在您编写的格式中,该对象是一个匿名对象,它是在方法调用中即时创建的。但是,您可以显式创建对象,并将该对象作为参数传递。

即您可以将该函数称为 tl.from(img, 1, objectWithVariousProperties)

这会导致下一个问题,即您正试图将一个字符串传递给代表特定 属性 名称的函数。为了能够以这种方式访问​​ 属性,您可以使用 JavaScript Object Bracket Notation,而不是 Dot Notation。看起来像 objectWithVariousProperties[someVariableNamingAProperty].

因此,将这些放在一起,您将接收参数、创建对象并准备其属性,然后将对象传递给函数。类似于以下内容:

请注意,我更改了变量名称以使代码尽可能清晰,并展示了 3 种不同的方法来为对象赋值 属性。

function test(selector, duration, axis, offset, animation, fadeDirection){

  var tl=new TimelineLite;
  var img = $(selector);

  var propertyObject = {
    autoAlpha: 0   // inline property assignment
  };  
  propertyObject[axis] = offset;  //bracket notation
  propertyObject.ease = animation + '.' + fadeDirection;  //dot notation

  var result = tl.from(img, duration, propertyObject);
  return result;
}