我有一张桌子(只是画在舞台上),里面有一些值。您应该能够单击表格中的不同框,并隐藏或显示该框中的值。
我这样做是通过在图层顶部放置一个图层,表格上有白色按钮(颜色与背景颜色相同)。因此,您应该能够单击按钮,使其不可见以显示值,然后再次单击以隐藏值。
import flash.events.MouseEvent;
//these are each of the instances of the white buttons.
var visibleValues:Array=new Array(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p);
for(var t:int=0; t<visibleValues.length; t++){
visiblesValues[t].addEventListener(MouseEvent.CLICK, showValue);
}
function showValue(evt:Event):void{
if (evt.target.visible){
evt.target.visible=false;
}
else{
evt.target.visible=true;
}
}
当按钮显示时单击该按钮将使其不可见(显示下面的数字),但是当我再次尝试再次点击该按钮时,该按钮不会再次出现。 为什么是这样?出于好奇,还有一种更简单的方法吗?当事件监听器都是同一个事件的实例时,必须将事件监听器分配给每个实例似乎很奇怪。 非常感谢!
答案 0 :(得分:0)
对于您的第一个问题,请尝试将Alpha设置为0.1而不是将其设置为false。当您将visible设置为false时,您也会禁用用户交互。
单击事件应该冒泡,这样您就可以将侦听器添加到父容器一次,然后使用类似event.currentTarget的内容来访问实际单击的按钮。当按钮的标签或外观部分被分配给currentTarget时,这会变得有点困难。
要解决此问题,您可以在每个按钮上将mouseChildren设置为false,或者在事件处理程序中继续调用.parent,直到您点击按钮或父容器。
请注意,当您向上听时,您也会获得对父级的点击,因此您需要在处理程序中处理该案例。
function showValue(evt:Event):void {
// Detect which button was clicked
var target:DisplayObject = evt.currentTarget as DisplayObject;
while(target) {
if (target is Button) {
break;
}
// container clicked so exit
if (target == container) {
return;
}
target = target.parent;
}
// No button was clicked so exit
if (!target) {
return;
}
// If we are solid then hide
if (target.alpha == 1){
target.alpha = 0.1;
} else{
target.alpha = 1;
}
}