2016-09-26 98 views
2

嗨我对JavaScript和CoffeeScript相当陌生,所以我目前正在研究原型并同时学习语言。在循环中访问咖啡脚本中的数组中的其他值(framer.js)

除了一件重要的事情之外,下面的代码块几乎完成了我想要的工作。任何帮助,将不胜感激

categories.forEach (cat,i) -> 
    mainCat= categ[i] = new Layer 
    width:185 
    height:77 
    parent:catSelect.content 
    y:13 
    x:205*i+20 
    image:categories[i] 
    categ[i].states.add 
    off: 
     image: categories[i] 
    on: 
     image: altCat[i] 
    categ[i].on Events.Click, -> 
    categ[i].states.next("on","off") 

    if categ[i].states.current is "on" 
     print "true" 

这里我有一个循环来创建类别按钮(mainCat),其具有2种状态附着的图像的单独的阵列(类别[]和altCat [])。

我已经把这个循环放在一个数组中,所以现在,当我点击一个类别时,我可以使用categ [i]来检查它的状态,但这几乎是我的限制。

现在,这基本上把我的categ []数组中的对象当作多项选择,而我希望它只允许数组中的一个对象一次处于“on”状态,一旦它处于“ on“状态,它需要显示特定的行卡,同时将其他行隐藏在另一个数组中(称为卡[])位于单独的图层/格中。

即是这样的:提前

if categ[!=i].states.current is "on" 
    categ[!=i].states.switch("off") 
    cardsRow[!=i].opacity=0 
    cardsRow[i].opacity=1 

谢谢!

+0

请问您可以为代码发布更多上下文吗? – kazzyt

回答

0

您必须遍历所有categ中的对象,然后检查它们是否与点击过的图层相同,以打开或关闭它们。

这同样适用于设置不透明度为另一个阵列层,但你应该使用循环的索引查找层起来:

categ[i].on Events.Click, -> 
    for l, index in categ 
     if categ[i] == l 
      l.states.switch("on") 
      cards[index].opacity = 1 
     else 
      l.states.switch("off") 
      cards[index].opacity = 0 

一个完整的原型,这在工作中,能在这里找到:http://share.framerjs.com/2yg7ix83yv1l/ 我已经用背景颜色替换了图像,使图层可见。

+0

你先生是一个传奇。精美的作品 – user6880664