切换AS3中按钮的可见性

时间:2013-12-16 21:21:34

标签: actionscript-3 flash

我有一张桌子(只是画在舞台上),里面有一些值。您应该能够单击表格中的不同框,并隐藏或显示该框中的值。

我这样做是通过在图层顶部放置一个图层,表格上有白色按钮(颜色与背景颜色相同)。因此,您应该能够单击按钮,使其不可见以显示值,然后再次单击以隐藏值。

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;
    }
}

当按钮显示时单击该按钮将使其不可见(显示下面的数字),但是当我再次尝试再次点击该按钮时,该按钮不会再次出现。 为什么是这样?出于好奇,还有一种更简单的方法吗?当事件监听器都是同一个事件的实例时,必须将事件监听器分配给每个实例似乎很奇怪。 非常感谢!

1 个答案:

答案 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;
    }
}