2

嗨,我对 javascript 和 CoffeeScript 还很陌生,所以我目前正在研究原型并同时学习这门语言。

以下代码块几乎完成了我想要它做的事情,除了一件重要的事情。任何帮助将不胜感激

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 个状态,附加了单独的图像数组(categories[] 和 altCat[])。

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

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

即类似的东西:

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

提前致谢!

4

1 回答 1

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/ 我已经用背景颜色替换了图像以使图层可见。

于 2016-09-26T14:56:36.220 回答