Pergunta

Olá a todos o meu problema hoje é que eu tenho um par de botões que deslizam para cima e para baixo, quando no estado se eu adicionar um gráfico X para simbolizar a um botão fechar. No entanto, o gráfico X parece estar bloqueando minha ação do botão.

text alt
(fonte: flickr.com )

Eu tenho um exemplo no filme Eu tenho trabalhado em >> aqui << . Existem 2 filmes aqui, o grande se você clique na guia seja azul você vai ver o que eu estou falando, mostras botão X para cima, mas ao clicar sobre a área de X não vai largar o botão para baixo. Você tem que clicar na área de botão azul para soltar o pressionado o botão de volta.

Agora eu fiz um filme de teste menor adicionar o botão X basicamente da mesma maneira e se você vai notar que funciona bem (vai animar para a direita, mesmo se você clicar sobre o gráfico X)

Aqui está o meu código no filme Big (eu escondi o código do tween por isso não vai ser tão longa):

function handleButtonClick(event:MouseEvent):void {
var button:MovieClip=event.target as MovieClip;
var id:Number=Number(button.name.split("button")[1]);

dispatchEvent(new CustomEvent(CustomEvent.PAUSE_MOVIE, {}));

if (! $btn1&&! $btn2) {
    if (storeButton2==buttons[id]) {
        closeTabX.x = buttons[1].width - (closeTabX.width + 10);
        closeTabX.y=buttons[1].height/2-15;
        buttons[1].addChild(closeTabX); // X added here
        $btn2=true;
        $btn1=false;
    } else if (storeButton1 == buttons[id]) {
        closeTabX.x = buttons[0].width - (closeTabX.width + 10);
        closeTabX.y=buttons[0].height/2-15;
        buttons[0].addChild(closeTabX); // X added here
        $btn1=true;
        $btn2=false;
    }
} else if ($btn1 && !$btn2) {
    if (storeButton2==buttons[id]) {
        buttons[0].removeChild(closeTabX); // X removed here
        buttons[1].addChild(closeTabX); // X added here
        $btn2=true;
        $btn1=false;
    } else if (storeButton1 == buttons[id]) {
        buttons[0].removeChild(closeTabX); // X removed here
        $btn1=false;
    }
} else if ($btn2 && !$btn1) {
    if (storeButton2==buttons[id]) {
        buttons[1].removeChild(closeTabX);
        $btn2=false;
    } else if (storeButton1 == buttons[id]) {
        buttons[1].removeChild(closeTabX); // X removed here
        buttons[0].addChild(closeTabX); // X added here
        $btn1=true;
        $btn2=false;
    }
}

}

Agora aqui está o código no meu filme teste básico:

var blueButton:MovieClip;
var closeBtnX:MovieClip;

blueButton = new BlueButton;
blueButton.buttonMode = true;

closeBtnX = new CloseTabX;
closeBtnX.x = blueButton.width/2 - closeBtnX.width;

addChild(blueButton);


blueButton.addEventListener(MouseEvent.MOUSE_UP, specialClick);

function specialClick(event:MouseEvent):void
{
  blueButton.addChild(closeBtnX); // X added here
  blueButton.x = blueButton.x+10;
}

Eu não entendo por que você não pode clicar no X no exemplo principal para fechar a guia, mas você pode, no meu pequeno filme básico? Pensamentos, idéias?

Foi útil?

Solução

Você não postar como você está instantiating 'closeTabX' no primeiro exemplo, é da mesma classe como o exemplo menor (CloseTabX)?

A 'correção' simples é que se você definir suas propriedades da seguinte forma ele não vai bloquear eventos de mouse para isso dos pais:

closeTabX.mouseEnabled = false;
closeTabX.mouseChildren = false;

Se essa classe não se destina a ser um alvo do mouse, você também pode definir essas propriedades no construtor da classe para evitar quaisquer instâncias dessa classe de bloquear eventos do mouse.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top