Ir para conteúdo

POWERED BY:

Arquivado

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

caps

[Resolvido] As 2. 0 botões e menu

Recommended Posts

Boa noite. Estou desenvolvendo um site e estou com uma dúvida na parte dos botões.

A dúvida é o seguinte:

Foram feitos 7 botões, mas aqui no caso vou utilizar como exemplo apenas dois.

Ao clicar no botão 1, abre o menu, e quando a animação termina, abre um swf externo em cima do menu, que é o texto.

Até ai tudo bem.

O botão 2 tem a mesma função, porém abre outro swf.

Se o usuário clicar no botão irá rodar a animação e abrir o conteúdo do botão 1. E com o menu aberto, se o usuário clicar no botão 2, apenas irá fechar o conteúdo do botão 1 e abrir o do botão 2, simples assim.

Isso tudo funciona perfeitamente.

MAS... Se eu o usuário clicar no botão 1, como eu disse acima vai rodar a animação do menu se abrindo e carregar o conteúdo do botão 1, e se eu clicasse novamente no botão 1, o menu deveria fechar o conteúdo do botão 1 e fechar o menu.

Mas com o código que estou utilizando, esta ultima parte não está funcionando, ou melhor, não achei uma maneira de fazer funcionar.

 

Observações:

O menu inicia parado no frame 1, quando se clica em um botão ele corre do frame 2 até o 50, onde fica parado novamente.

E então, deveria ir do 51 adiante para fechar.

Tentei da forma abaixo, mas não há como funcionar a parte do else sobre o frame 51... Analisem:

 

Outra observação:

o conteudomc é o mc onde há um retangulo que vai abrindo, ou seja, o menu mesmo, onde irá aparecer o texto

e o menumc é uma barra que fica ao lado do retangulo, abrindo junto a ele...

 

Se houver dúvidas me avise onde que explicarei com maior detalhes, prefiro não postar o fla.

 

Código:

 

botão1:

 

botão1.onPress = function() {
if (_root.menumc._currentframe==1) {
       _root.menumc.gotoAndPlay(2);
	loadMovieNum("coleções.swf",1); 
	} 
else if (_root.menumc._currentframe==50) {
	loadMovieNum("coleções.swf",1);
	unloadMovieNum(2);
}
else {
	unloadMovieNum(1);
	_root.menumc.gotoAndPlay(51);
}
if (conteudomc._currentframe==1) {
       conteudomc.gotoAndPlay(2);
	} 
else if(conteudomc._currentframe==50) {
	unloadMovieNum(2);

}
       else {
	conteudomc.gotoAndPlay(51);
}
}

 

botão2:

 

botão2.onPress = function() {
if (_root.menumc._currentframe==1) {
       _root.menumc.gotoAndPlay(2);
	loadMovieNum("coleções.swf",2); 
	} 
else if (_root.menumc._currentframe==50) {
	loadMovieNum("coleções.swf",2);
	unloadMovieNum(1);
}
else {
	unloadMovieNum(2);
	_root.menumc.gotoAndPlay(51);
}
if (conteudomc._currentframe==1) {
       conteudomc.gotoAndPlay(2);
	} 
else if(conteudomc._currentframe==50) {
	unloadMovieNum(2);

}
       else {
	conteudomc.gotoAndPlay(51);
}
}

 

 

 

 

Peço a ajuda dos amigos do fórum iMasters, Grato.

 

Alguma luz por favor!!

É urgente... :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

A animação de retorno que vai do frame 51 em diante, é a mesma do frame 2 ao 50 só que invertida?

Se a animação for a mesma, você pode fazer uma função que adianta ou retorna o frame dentro do movieclip, com nextFrame() e prevFrame, assim ele fica até melhor sincronizado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A animação de retorno que vai do frame 51 em diante, é a mesma do frame 2 ao 50 só que invertida?

Se a animação for a mesma, você pode fazer uma função que adianta ou retorna o frame dentro do movieclip, com nextFrame() e prevFrame, assim ele fica até melhor sincronizado.

 

Primeiramente, obrigado pela ajuda carneirinho.

Seguinte, a animação do frame 2 ao 50 é a mesma que a do retorno, do frame 51 em diante, no mesmo mc.

O problema é que é esse mc pra todos os botões...

Ao clicar em um dos botões, qualquer um, ativa esse mc, que fica parado no frame 50, e então, deveria abrir o conteúdo do botão clicado, que é puxado com loadMovieNum. Então quero que se eu clicar no botão home por exemplo, rode o mc de animação, e quando estiver no frame 50 abra o conteúdo home. Caso eu clique novamente no home, feche o conteúdo e logo após a animação. Mas se estiver no frame 50, e eu clicar em outro botão, diferente do home que já foi clicado e que está com o conteúdo aberto no momento, como por exemplo o botão coleções, feche apenas o conteúdo do home e abra o do coleções, não fechando a animação, entende? E depois disso se eu clicar em coleções novamente, feche o conteúdo coleções e também a animação.

Tentando resumir:

Se eu clicar em home, roda animação abra conteúdo home. Clicando novamente em home, feche conteúdo e animação.

Ou seja, se clicar no botão cujo conteúdo está aberto, feche ambos: conteúdo e animação. Caso seja outro botão, só mude o conteúdo, fechando um e abrindo outro.

Isso é o problema...

 

Na espera de sua ajuda... desde já, grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu fosse você faria o seguinte, colocaria uma variavel pra saber qual sessão foi ativada nesse movieclip da animação. Dai você pode usar um onEnterFrame para saber se o movieclip chegou no frame 50 usando o _totalframes, pois ele seguirá com o nextFrame() até o último frame desse movieclip, ficaria mais ou menos assim:

 

bt1.onRelease = function(){
ctrlAbertura("bt1.swf", "bt1");
}

bt2.onRelease = function(){
ctrlAbertura("bt2.swf", "bt2");
}



function ctrlAbertura(swf, sessao){
mc.swf = swf;
if(sessao != mc.sessao){
	mc.onEnterFrame = function(){
		if(mc._currentframe != mc._totalframes){
			mc.nextFrame();
		} else {
			mc.sessao = sessao;
			trace("carrega: " + this.swf); // Aqui você usa o loadMovie
			delete this.onEnterFrame;
		}
	}
} else {
	mc.onEnterFrame = function(){
		if(mc._currentframe != 1){
			mc.prevFrame();
		} else {
			mc.sessao = "";
			trace("voltou a animação");
			delete this.onEnterFrame;
		}
	}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda novamente...

Então...

Não entendi direito o código (sou ainda meio novo em flash).

Não sei se está completo o código ou tem que adicionar mais algo... mas, o que você passou, se clico em um dos botões, a animação corre do 2 ao 50 e do 51 ao final, e para no 1 novamente.

E na parte onde era pra dar loadMovieNum que você falou, load dos dois botões? Abriu os dois juntos... enfim, não deu muito certo.

Com esse código se clico em um botão, faz toda a animação corrida e para de novo no frame 1 como falei, e no fim da animação aparece a mensagem:

carrega: bt1.swf

ou então bt2 se clicar no bt2

é obrigatório o uso do trace?

também se depois de clicar em um deles tentar o mesmo de novo ou o outro botão apenas aparece a mensagem dita acima e não roda animação nenhuma...

outra coisa, usei como exemplo 2 botões... mas na verdade são 7...

enfim... como faço o código pros 7 botões? com a função dita no meu post anterior...

esse não deu muito certo, ou então não entendi muito bem e não consegui aplicá-lo corretamente...

se possível explique o código também, caso tenha tempo...

Muito obrigado!

 

 

####EDIT:

 

Deixei passar uma linha no código, onde não havia mudado o nome do mc... mudei, e então,agora está ocorrendo o seguinte:

 

Aparece no output, a mensagem: carrega home.swf ou carrega coleções.swf dependendo do botão clicado. Usando como exemplo o seguinte:

Cliquei em home, deu animação, depois apareceu carrega: home.swf, clicando novamente em home, aparece: voltou a animação. e se clico em coleçoes depois de clicar em home, aparece carrega: coleções.swf, e clicando novamente em coleções, voltou a animação. Teoricamente, com as mensagem, tudo parece estar certo.

Porém, na pratica, se clico em home, a animação vai do frame 1 ao 51 em diante direto,ou seja, abre e fecha. E quando fecha aparece o carrega: home.swf e se clico novamente em home, a animação abre novamente e fecha, direto, e diz:voltou a animação.

Isso que está errado.. devia parar no 50...

E seguinte, não botei os loadMovieNum... pois não sei o lugar de cada load... pra cada botão... botei no mesmo, abre os dois juntos...

Enfim, se puder explicar o código como disse antes, caso você tenha tempo... agradeço muito!

E também arrumar a parte do frame 50, que não para...

Lembrando: são 7 botões... seria só adicionar o ctrlAbertura("nome.swf","nome"); em cada botão? ou necessitaria de mais algo na função ctrlAbertura?

 

 

Desde já, muuuito grato...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, porisso te perguntei se a animação a partir do frame 50 é a mesma. Faça o seguinte, você vai excluir todos os seus frames depois do frame 50, pois ele vai usar do frame 1 ao 50 para fazer a ida, e do 50 ao um para fazer a volta.

O trace não é obrigatório, deixei comentado para ali você usar o loadMovie no lugar do trace deixando loadMovieNum(this.swf, 1), não gosto de loadMovieNum, mas faça assim só pra testar e verá que vai dar certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, porisso te perguntei se a animação a partir do frame 50 é a mesma. Faça o seguinte, você vai excluir todos os seus frames depois do frame 50, pois ele vai usar do frame 1 ao 50 para fazer a ida, e do 50 ao um para fazer a volta.

O trace não é obrigatório, deixei comentado para ali você usar o loadMovie no lugar do trace deixando loadMovieNum(this.swf, 1), não gosto de loadMovieNum, mas faça assim só pra testar e verá que vai dar certo.

 

 

Boa tarde carneirinho.

Então... mudei o código e ficou assim: (Vou botar junto todas as outras ações que estão no frame 1 da layer de actions...

 

homemc.onRollOver = function() {
this.gotoAndPlay(2);
}
homemc.onRollOut = function() {
this.gotoAndPlay(21);
}
homemc.onReleaseOutside = function() {
this.gotoAndPlay(21);
}
homemc.onPress = function() {
loadMovieNum("som.swf",1);
ctrlAbertura("home.swf", "home");
}	

colecoesmc.onRollOver = function() {
this.gotoAndPlay(2);
}
colecoesmc.onRollOut = function() {
this.gotoAndPlay(21);
}
colecoesmc.onReleaseOutside = function() {
this.gotoAndPlay(21);
}
colecoesmc.onPress = function() {
loadMovieNum("som.swf",1);
ctrlAbertura("coleções.swf", "coleções");
}

atendimentomc.onRollOver = function() {
this.gotoAndPlay(2);
}
atendimentomc.onRollOut = function() {
this.gotoAndPlay(21);
}
atendimentomc.onReleaseOutside = function() {
this.gotoAndPlay(21);
}
atendimentomc.onPress = function() {
loadMovieNum("som.swf",1);
ctrlAbertura("atendimento.swf", "atendimento");
}
promocoesmc.onRollOver = function() {
this.gotoAndPlay(2);
}
promocoesmc.onRollOut = function() {
this.gotoAndPlay(21);
}
promocoesmc.onReleaseOutside = function() {
this.gotoAndPlay(21);
}
promocoesmc.onPress = function() {
loadMovieNum("som.swf",1);
ctrlAbertura("promoções.swf", "promoções");
}

pagamentomc.onRollOver = function() {
this.gotoAndPlay(2);
}
pagamentomc.onRollOut = function() {
this.gotoAndPlay(21);
}
pagamentomc.onReleaseOutside = function() {
this.gotoAndPlay(21);
}
pagamentomc.onPress = function() {
loadMovieNum("som.swf",1);
ctrlAbertura("pagamento.swf", "pagamento");
}

enderecomc.onRollOver = function() {
this.gotoAndPlay(2);
}
enderecomc.onRollOut = function() {
this.gotoAndPlay(21);
}
enderecomc.onReleaseOutside = function() {
this.gotoAndPlay(21);
}
enderecomc.onPress = function() {
loadMovieNum("som.swf",1);
ctrlAbertura("endereço.swf", "endereço");
}

contatomc.onRollOver = function() {
this.gotoAndPlay(2);
}
contatomc.onRollOut = function() {
this.gotoAndPlay(21);
}
contatomc.onReleaseOutside = function() {
this.gotoAndPlay(21);
}
contatomc.onPress = function() {
loadMovieNum("som.swf",1);
ctrlAbertura("contato.swf", "contato");
}

function ctrlAbertura(swf, sessao){
       conteudomc.swf = swf;
       if(sessao != conteudomc.sessao){
               conteudomc.onEnterFrame = function(){
                       if(conteudomc._currentframe != 50){
                               conteudomc.nextFrame();
			menumc.nextFrame();

                       } else {
                               conteudomc.sessao = sessao;
                               trace("carrega: " + this.swf);// Aqui você usa o loadMovie
			delete this.onEnterFrame;
						    }

                       }
       } else {
               conteudomc.onEnterFrame = function(){
                       if(conteudomc._currentframe != 1){
                               conteudomc.prevFrame();
			menumc.prevFrame();

                       } else {
                               conteudomc.sessao = "";
                               trace("voltou a animação");
			delete this.onEnterFrame;
					}
			}
	}
}

 

 

Sobre a frame 50, com aquela pequena mudança já foi resolvido. Porém, onde você diz para botar o loadMovieNum, está até funcionando, nessa parte:

 

if(conteudomc._currentframe != 1){
                               conteudomc.prevFrame();
			menumc.prevFrame();

Estou botando o unloadMovieNum, para fechar quando a animação for fechada...

 

Tudo certo, mas...

Como são vários botões e conteúdos, não apenas um, se colocado mais de um loadMovieNum lá onde você falou, são abertos todos os conteúdos quando clicado em qualquer um dos botões... e não é isso que era pra acontecer... caso eu clique em home, abra apenas home, se clicar em coleções, abra apenas coleções... e assim vai. Como devo fazer para acontecer isto?

 

E obrigado pela ajuda amigo, estamos quase finalizando... :joia:

 

Uma pergunta:

 

Qual a vantagem de utilizar onRelease ao invés de onPress? Há diferença? Qual?

 

Obrigado mais uma vez...!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu nem estou vendo onde você deixou o loadMovieNum no seu código, mas seria melhor você trocar o loadMovieNum por um loadMovie, ficando loadMovie(swf, _target); onde _target é um movieclip que você usa pra carregar e descarregar seus swfs que serão colocados no palco, se quiser criar dinamicamente use o this.createEmptyMovieClip("_target", this.getNextHighestDepth());

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu nem estou vendo onde você deixou o loadMovieNum no seu código, mas seria melhor você trocar o loadMovieNum por um loadMovie, ficando loadMovie(swf, _target); onde _target é um movieclip que você usa pra carregar e descarregar seus swfs que serão colocados no palco, se quiser criar dinamicamente use o this.createEmptyMovieClip("_target", this.getNextHighestDepth());

 

 

Boa tarde novamente...

Carneirinho, você não viu os loadMovie pois não estão ali... foi isso o que eu quis dizer:

Sabe ali onde está escrito "//Aqui você usa o loadMovie" que você mesmo botou no código? Pois é, caso eu bote os loadmovie de cada botão, com cada conteúdo ali onde você citou, todos abrem juntos não importando o botão que se clique... e é isso que eu quero dizer... deveria abrir o conteúdo de cada loadMovie no frame 50, mas o conteúdo cujo botão foi clicado. exemplo:

cliquei em home > quando chegar no frame 50 ou se estiver já no 50, abra apenas o conteúdo home.

cliquei em coleções > quando chegar no frame 50 ou se estiver já no 50, abra apenas o conteúdo coleções.

cliquei em atendimento > quando chegar no frame 50 ou se estiver já no 50, abra apenas o conteúdo atendimento.

e assim adiante... e o que não está acontecendo é o conteúdo abrir no botão correspondente...

 

Então as perguntas:

Onde devo usar o loadMovie de cada botão, para cada conteúdo, para ocorrer corretamente o que citei acima?

E, qual a vantagem de utilizar onRelease ao invés de onPress?

 

Na espera de sua resposta, valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais explicado que isso é impossível, eu criei a função que ja faz exatamente o que você quer, e onde ta marcado que é pra por o loadMovie, é porque é pra você por o loadMovie, ficaria assim:

 

function ctrlAbertura(swf, sessao){
       conteudomc.swf = swf;
       if(sessao != conteudomc.sessao){
               conteudomc.onEnterFrame = function(){
                       if(conteudomc._currentframe != 50){
                               conteudomc.nextFrame();
                               menumc.nextFrame();

                       } else {
                               conteudomc.sessao = sessao;
                               loadMovieNum(this.swf, 2);
                               delete this.onEnterFrame;
                                                           }

                       }
       } else {
               conteudomc.onEnterFrame = function(){
                       if(conteudomc._currentframe != 1){
                               conteudomc.prevFrame();
                               menumc.prevFrame();

                       } else {
                               conteudomc.sessao = "";
                               trace("voltou a animação");
                               delete this.onEnterFrame;
                                               }
                               }
               }
}

 

A diferença entre Press e Release é que o Press vai executar assim que você apertar o mouse, se você só apertar o botão do mouse ele ja executa mesmo que você não solte o botão. Ja o Release dispara quando você solta o botão do mouse, você aperta e ele ainda não executa, quando você solta ele executa. Não tem uma vantagem, somente a diferença de tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde...

Tivemos alguns posts desnecessários, eu não havia percebido que deveria utilizar o this.swf no load, pensei que deveria por o nome de cada arquivo. Enfim, desculpe pelo transtorno...

Agora está tudo correndo eficientemente.

Valeu Carneirinho, obrigado pela ajuda, e novamente, desculpe pelo transtorno.

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.