Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Elektra

[Resolvido] Desabilitar o click após carregar swf

Recommended Posts

Os 2 codes são do Michel Araújo, menu ativado e switch, reuni e adaptei para o carregamento de páginas externas.

 

Tentei adicionar o 'buttonMode = true;' no for, mas só altera o cursor abaixo do texto. Em outras partes do action também não funfou.

 

O help da Adobe pt_BR, por enquanto, não ajudou muito, no google a maioria dos exemplos é pra AS2, em AS3, nada semelhante.

 

Não sei como evitar que a página seja recarregada ao clicar no botão ativo, nem habilitar o mc como botão.

 

Estou começando no AS3, agradeço quem puder auxiliar. Exemplo online >> Clique aqui

 

 

stop();

var menu:Array =["Home", "Empresa", "Produtos","Contato"];
var i:uint;
var ativo:Object=bt0;

for(i=0;i<=3;i++){
	this["bt"+i].txtBotao.text=menu[i];
	if(i!=0){
		this["bt"+i].addEventListener(MouseEvent.MOUSE_OVER, over);
		this["bt"+i].addEventListener(MouseEvent.MOUSE_OUT, out);
		this["bt"+i].addEventListener(MouseEvent.CLICK, clique);
				
	}
}

bt0.gotoAndStop(10); 

function over(evt:MouseEvent):void {
	evt.currentTarget.gotoAndPlay("over");
}
function out(evt:MouseEvent):void {
	evt.currentTarget.gotoAndPlay("out");
}

function clique(evt:MouseEvent):void {
	ativo.addEventListener(MouseEvent.MOUSE_OVER, over);
	ativo.addEventListener(MouseEvent.MOUSE_OUT, out);
	ativo.addEventListener(MouseEvent.CLICK, clique);
		
	ativo.gotoAndStop(1); 
	
	ativo=evt.currentTarget;
		
	ativo.removeEventListener(MouseEvent.MOUSE_OVER, over);
	ativo.removeEventListener(MouseEvent.MOUSE_OUT, out);
	ativo.removeEventListener(MouseEvent.CLICK, clique);

}

var link:URLRequest = new URLRequest("home.swf");
mcCarrega.gotoAndPlay(2);

bt0.addEventListener(MouseEvent.CLICK, carrega);
bt1.addEventListener(MouseEvent.CLICK, carrega);
bt2.addEventListener(MouseEvent.CLICK, carrega);
bt3.addEventListener(MouseEvent.CLICK, carrega);

function carrega(evt:MouseEvent):void {
	switch (evt.currentTarget) {
		case (bt0):
			link=new URLRequest ("home.swf");
			break;
			
		case (bt1):
			link=new URLRequest ("empresa.swf");
			break;
			
		case (bt2):
			link=new URLRequest ("produtos.swf");
			break;
			
		case (bt3):
			link=new URLRequest ("contato.swf");
			break;
	}
	
	mcCarrega.gotoAndPlay(2);
}

 

Abraços

 

 

ps: os fractais belíssimos são do Pantoja, colega do fórum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O buttonMode apenas define o comportamento do ponteiro mas não sobre suas ações.

O comando correto seria o mouseEnabled, mas eu imagino que você percebeu que parece não funciona.

Acontece que esse comando desabilita a execução dos eventos de mouse, pelo mouse no objeto que você especificou mas não no elementos dentro do seu botão.

Isso quer dizer que o botão para de executar o evento, mas a caixa de texto dentro dele, não.

Assim, imagino que usando o mouseChildren, que desabilita o mouse para os elementos dentro do seu botão resolveria o seu problema:

for(i=0;i<=3;i++){
	this["bt"+i].txtBotao.text=menu[i];
	this["bt"+i].mouseChildren = false;
    this["bt"+i].addEventListener(MouseEvent.MOUSE_OVER, over);
	this["bt"+i].addEventListener(MouseEvent.MOUSE_OUT, out);
	this["bt"+i].addEventListener(MouseEvent.CLICK, clique);
	this["bt"+i].addEventListener(MouseEvent.CLICK, carrega);
}

bt0.gotoAndStop("over");
bt0.mouseEnabled = false;

function clique(evt:MouseEvent):void {
	ativo.mouseEnabled = true
    ativo.gotoAndStop("out"); 
	ativo = evt.currentTarget;
	ativo.mouseEnabled = false;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigada pela atenção Foxn, sempre aprendo com você.

 

 

Testei aqui, mas ainda não consegui fazer funcionar. Fui conferir no help o 'mouseChildren', não conhecia isso.

 

O que me interessa mesmo aprender é manter o estado ativo e impedir que a página seja re-carregada.

 

 

 

Timeline mata :lol: (eu também invento as minhas). Ainda levo um bom tempo pra me libertar.

 

 

Vou ver se consigo substituir os 'botões fru-fru' por um mc com estados via action.

 

Dou um retorno o mais breve possível.

 

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor, desculpe a demora.

 

Não descobri como resolver isso, por falta de conhecimento mesmo, mas sei que vou aprender.

 

Agradeço honestamente se puder me sugerir uma forma simples de não re-carregar a página, nem precisa que o botão fique selecionado.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Imagino que isso resolva o problema:

 

stop();

var menu:Array = ["Home","Empresa","Produtos","Contato"];
var i:uint;
var ativo:MovieClip = new MovieClip();
var link:URLRequest;

for (i=0; i<=3; i++)
{
	this["bt" + i].txtBotao.text = menu[i];
	this["bt" + i].mouseChildren = false;
	this["bt" + i].addEventListener(MouseEvent.MOUSE_OVER, over);
	this["bt" + i].addEventListener(MouseEvent.MOUSE_OUT, out);
	this["bt" + i].addEventListener(MouseEvent.CLICK, carrega);
	this["bt" + i].addEventListener(MouseEvent.CLICK, clique);
}

function over(evt:MouseEvent):void
{
	if (ativo != evt.currentTarget)
	{
		evt.currentTarget.gotoAndPlay("over");
	}
}
function out(evt:MouseEvent):void
{
	if (ativo != evt.currentTarget)
	{
		evt.currentTarget.gotoAndPlay("out");
	}
}

function clique(evt:MouseEvent):void
{
	if (ativo != evt.currentTarget)
	{
		trace("clique");
		ativo.gotoAndPlay("out");
		ativo = evt.currentTarget as MovieClip;
		ativo.gotoAndPlay("over");
	}
}

function carrega(evt:MouseEvent):void
{
	if (ativo != evt.currentTarget)
	{
		trace("carrega");
		switch (evt.currentTarget)
		{
			case (bt0) :
				link = new URLRequest("home.swf");
				break;

			case (bt1) :
				link = new URLRequest("empresa.swf");
				break;

			case (bt2) :
				link = new URLRequest("produtos.swf");
				break;

			case (bt3) :
				link = new URLRequest("contato.swf");
				break;
		}
	}
	mcCarrega.gotoAndPlay(2);
}

bt0.dispatchEvent(new MouseEvent(MouseEvent.CLICK));

 

Eu testei aqui e parece estar ok.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu aqui dando uma trabalheira danada, hein Foxn! :D (fazer o que né, quero mesmo é compreender).

 

Agradeço demais pela atenção.

 

Testei, com os arquivos do Michel, mas ainda não deu certo.

 

Não conhecia o 'currentTarget as MovieClip' e 'dispatchEvent', vou me informar.

 

Penso que o problema se encontre na forma como o botão foi criado, que não corresponde ao uso do mouseChildren.

 

botão ativado

 

Outra coisa que pode estar dificultando é uma transição de páginas com um movie clip sobreposto e preloader no frame intermediário (foi a única transição que encontrei, até o momento).

 

transição + preloader

 

stop();

// Declaração de Variável
var carrega:Loader = new Loader();

// Carregando o arquivo escolhido na variável CARREGA
carrega.load(MovieClip(root).link);

// Verificação de Eventos de Carregamento
carrega.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, carregando);
carrega.contentLoaderInfo.addEventListener(Event.COMPLETE, completo);

// Funções de Carregamento
function carregando(evt:ProgressEvent):void {
	var perc:Number = evt.bytesLoaded/evt.bytesTotal;
	barra.scaleX = perc;
	percentual.text = Math.floor(perc*100) + "%";
}

function completo(evt:Event):void {
	MovieClip(root).container.removeChildAt(0);
	MovieClip(root).container.addChild(carrega);
	play();
}

 

Aqui um exemplo, a transição não é grande coisa, mas nem isso eu sei >> http://www.alfamidia.com.br/publico/dfl/index.swf

 

Vou arrastar mais umas correntes e ver o que consigo fazer. ;) (com muito amor)

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

No script que publiquei o carregar estava fora da condição:

 

function carrega(evt:MouseEvent):void
{
	if (ativo != evt.currentTarget)
	{
		trace("carrega");
		switch (evt.currentTarget)
		{
			case (bt0) :
				link = new URLRequest("home.swf");
				break;

			case (bt1) :
				link = new URLRequest("empresa.swf");
				break;

			case (bt2) :
				link = new URLRequest("produtos.swf");
				break;

			case (bt3) :
				link = new URLRequest("contato.swf");
				break;
		}
		mcCarrega.gotoAndPlay(2);
	}
}

 

E apenas para garantir, segue um exemplo: http://www.renatopac....br/elektra.fla

Compartilhar este post


Link para o post
Compartilhar em outros sites

Querido amigo, as lágrimas estão caindo aqui, fiquei feliz demais. :D

 

Fiz um curso de AS3, 40 hs, se aprende o básico do básico. Tenho muito o que ralar ainda. Adquiri livros, DVD com vídeo aulas, comecei a estudar inglês e em breve vou fazer um curso de lógica.

 

Só você mesmo para adicionar um trace e auxiliar meu entendimento, é tudo o que quero, melhor impossível.

 

Eu já tinha revirado exemplos em AS2, em AS3 com arquivos internos, e o único em AS3 com carregamento externo tinha um code muito além do meu conhecimento, eu não sabia nem por onde começar.

 

 

Agora é tentar melhorar a 'transição' de páginas (essa foi a única que encontrei, até o momento), ajustar o code e substituir o preloader interno por uma classe. Aos poucos vai melhorando.

 

 

Se você não existisse, precisavam lhe inventar.

 

É dos raros que auxiliam com humanidade. Fico lhe devendo mais essa Foxn. http://forum.imasters.com.br/public/style_emoticons/default/worshippy.gif

 

 

Muito, muito obrigada mesmo.

 

Aqui o arquivo corrigido publicado >> Clique aqui http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só uma dúvida, como os swf externos são chamados. Quero dizer, sei que é no MC container mas que função uso pra chama-los ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela resposta Elektra

 

Assisti a video aula, muito bem explicada. Consegui recriar o proposto mas ao invés dos keyframes utilizei um txt dinâmico. Minha duvida é como carregar os swf externos. Já li vários post pela net sobre o carregamento em AS3, mas ainda não peguei a manha.

Em AS2 era apenas uma linha no botão e já puxava o filme no mc vazio.

 

por exemplo no tutorial

 

switch(ativo){
  case (news0):
  item.text = "01";
  vazio.load(new URLRequest("home.swf"));
  break

 

Aparece o seguinte erro

TypeError: Error #1006: load não é uma função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

JH0NNY

 

Fica legal você criar um novo tópico próprio com a sua necessidade.

 

Este era sobre desabilitar o click em um botão.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.