Gráfico ao longo botão é minha bloqueando MouseEvent por quê?
-
10-07-2019 - |
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.
(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?
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.