0

我有一大堆按钮,它们都需要同时具有鼠标悬停效果和切换效果(点击时)来改变色调。我已经为每个色调变化制作了功能,并且这些部件工作得很好。可悲的是,我无法弄清楚如何让我的切换功能按应有的方式工作。

下面是我的切换按钮代码。它工作正常,除了我的变量是全局的而不是特定于实例的。因此,它只有在我只有一个按钮时才有效。如何更改它以使用一个用于焦点按钮的变量?

提前致谢!

var primary = false;

function clickOn(e:MouseEvent):void{ 
    if (primary == false)     {
            greenHue(e.target);
            primary = true;
    } else {
            noHue(e.target);
            primary = false;
    }
}
4

3 回答 3

2

最好的办法是扩展您用于按钮的类并向其添加功能,因此从它派生的所有按钮都将具有您想要的独立行为。

class ColoredButton extends Button {
    var primary = false;  

    public function ColoredButton() {
        this.addEventListener(MouseEvent.CLICK, clickOn);
    }

    private function clickOn(e:MouseEvent):void {   
        if (primary == false)     {  
            greenHue(e.target);  
            primary = true;  
        } else {  
            noHue(e.target);  
            primary = false;  
        }  
    }

    ...
  }
于 2012-07-02T22:59:52.963 回答
0

实际上,这取决于您如何为应用程序选择设计。我的意思是,如果您的按钮数量有限,并且您确切地知道它们是什么并且它们保持不变(例如,按钮 1、按钮 2、按钮 3 或色调、饱和度和亮度),那么您可以拥有三个切换变量。所以你想做:

var primaryH = false;
var primaryS = false;
var primaryL = false;

然后,三个事件声明:

buttonH.addEventListener(MouseEvent.CLICK, clickOnH);
buttonS.addEventListener(MouseEvent.CLICK, clickOnS);
buttonL.addEventListener(MouseEvent.CLICK, clickOnL);

和三个函数声明:

function clickOnH(e:MouseEvent):void{ 
    if (primaryH == false)     {
            greenHue(e.target);
            primaryH = true;
    } else {
            noHue(e.target);
            primaryH = false;
    }
}

...

否则,最好的办法是在按钮对象中创建切换变量和函数。这将是“更多的 OOP”,并允许您创建任意数量的按钮,而无需一遍又一遍地编写相同的东西。

于 2012-07-02T22:44:08.650 回答
0

这就是我所做的。

var primary:Array = new Array;



    if (primary[e.target.name] == true || secondary[e.target.name] == true) {
        noHue(e.target);
        primary[e.target.name] = false;

    } else {

            greenHue(e.target);
            primary[e.target.name] = true;

        }
    }

}
于 2012-07-05T13:17:07.397 回答