2016-07-14 163 views
0

我目前正在研究一个有很多SVG动画的项目。当用户滚动到SVG时,需要触发这些动画。使用动态属性键获取javascript对象的属性值

我决定为每个Snap.SVG动画制作功能,并将它们存储在使用SVG的ID作为像这样的关键对象的数组:

//Example Object 

var item = { 
    aboutUsSVG: function(){ 
     //aboutUsSVG animation code to go here 
    } 
} 

我创建了一个Codepen的到目前为止我的代码在这里:

http://codepen.io/decodedcreative/pen/mEpZbx

我设法创造微小物体的阵列。我有第二个功能,当SVG在屏幕上播放动画。我无法使用动态键访问存储在数组中的动画功能。

如果我知道的SVG的像这样的名字我可以访问功能:

var playAnimation = animations.animationsArray[0].ourCompanies; 

playAnimation(); 

但我希望编写可用于网站上的所有动画的解决方案,从而希望查询的DOM对于SVG ID,然后查找相应的动画。

所以:

var animationID = $(this).find(".svg-animation svg").attr('id'); 
var playAnimation = svgAnimations.animationsArray[0].animationID; 
playAnimation(); 

但在上述animationID代码被逐字而不是使用由所述关于我们函数代替。

我认为这是一个相当常见的JS问题。谁能帮忙?

+0

您正在寻找'[]'运算符。 – Pointy

+0

'object [animationID]'把变量放在方括号内,而不是点符号。 – bloodyKnuckles

+0

你上面的“数组”被称为item,我没有看到你在下面的任何地方引用'item'。这导致我怀疑这是否是一个命名问题。 – Dellirium

回答

1

要使用需要使用括号符号的可变访问数组的一个属性:

var animationID = $(this).find(".svg-animation svg").prop('id'); 
svgAnimations.animationsArray[0][animationID](); 
1

可以使用括号记号具有动态可变

检查访问下面的代码对象属性

var animationID = $(this).find(".svg-animation svg").attr('id'); 
var playAnimation = svgAnimations.animationsArray[0][animationID]; 
playAnimation(); 
+0

我绝对尝试过这一点,但当时似乎没有工作。但另一种尝试已证明是成功的。多谢你们 –