我在一个Flash文件中有180个按钮,对于所有按钮,我需要翻转和点击事件,因此我使用的代码是:
button1.onRollOver = function() { //on roll over change button color as white
var color = new Color(button1);
color.setRGB("0xFFFFFF");
};
button1.onRollOut = function() { //on roll out reset button color to it`s default
resetColorFunction();
};
button1.onPress = function() { //on click/press runs javascript function in page
getURL("javascript:ButtonPress('button1');");
};
问题是我有180个按钮,所以我将这个代码复制到每个按钮,button1,button2,button3,button4 ......等,直到button180。
有没有办法通过一个简单的代码函数遍历所有按钮。
谢谢
答案 0 :(得分:1)
您可以在舞台或任何容器中使用for-in
循环。
for (var item in this) {
if (this[item] instanceof Button) { //-- Use the most relevent class for abstraction
var btn = this[item];
trace ("Button: " + btn._name + " btn._x:" + btn._x + " a: " + btn._alpha);
//-- add Logic for event handlers.
}
}
答案 1 :(得分:0)
您可以将所有这些按钮添加到某种类型的集合中,然后遍历所有元素并添加事件处理程序。 像这样:
var buttons:ArrayCollection = new ArrayCollection();
var button1:Button = new Button();
var button2:Button = new Button();
// some more buttons creation ...
每次创建按钮时,只需将其添加到buttons
集合。
buttons.addItem(button1);
buttons.addItem(button2);
// etc
最后,您只需遍历所有按钮并添加所需的事件处理程序。
for each (var button:Button in buttons)
{
button.onRollOver = function() { // handle RollOver };
button.onRollOut = function() { // handle RollOut };
button.onClick = function() { // handle Click };
}
要使用数组,您可以执行以下操作:
var buttons:Array = [];
buttons.push(button1);
// add all other buttons..
for (var i:uint = 0; i < buttons.length; i++)
{
var button:Button = Button(buttons[i]);
button.onRollOver = function() { // handle RollOver };
button.onRollOut = function() { // handle RollOut };
button.onClick = function() { // handle Click };
}
答案 2 :(得分:0)
您可以在Actionscript 2中使用eval,以最小的努力标记所有按钮。
buttonRollOver = function() { ... };
buttonRollOut = function() { ... };
buttonPressed = function() { ... };
for (var i=1; i<181; i++)
{
eval("button"+i).onRollOver = buttonRollOver;
eval("button"+i).onRollOut = buttonRollOut;
eval("button"+i).onPress = buttonPressed;
}
在那里,你拥有一切美好而快速。