quarta-feira, 29 de abril de 2009

ComboBox

Olá, todos sabemos(eu espero que sim) que o FLash/AS3 já vem com varios componentes prontos para editar, uma deles é o "comboBox", mas ele possui algumas limitações, como por exemplo colocar imagens no lugar de texto. Estou trabalhando num projeto e me deparei com uma dessas limitações, então resolvi fazer meu próprio ComboBox.
Os dados estão nesse XML, é bom dar uma olhada nele.


Escolha uma opção.

O código comentado:
//importando a casse Tweener.
import caurina.transitions.Tweener;

//criando os objetos XML
var xml1:XML;
var xmlList1:XMLList;
//carregando o XML
var xmlLoader1:URLLoader = new URLLoader();
xmlLoader1.load(new URLRequest("http://65.254.56.211/~soda/sodaflash/select/sel.xml"));
xmlLoader1.addEventListener(Event.COMPLETE, xmlLoaded1);

//ao carregar o XML entra nessa função
function xmlLoaded1(event:Event):void {
//preparando o XML
xml1=XML(event.target.data);
xmlList1=xml1.children();

//for para ler os nós do XML
for (var i:int = 0; i < style="color: rgb(153, 153, 153);">//criando o objeto Nome
Nome = new nome();
//adicionando ao comboBox
sel.aqui.addChild(Nome);
Nome.name=String(i); Nome.texto.text=xmlList1[i]; Nome.y=Nome.height*i; Nome.addEventListener(MouseEvent.MOUSE_OVER,overNome); Nome.addEventListener(MouseEvent.MOUSE_OUT,outNome); Nome.addEventListener(MouseEvent.CLICK,clickNome);
}
}
//criando o objeto Nome
var Nome:nome;

//variavel que pega o local Y do objeto clicado
var seguraY:int=0;
//mascara do comboBox
sel.aqui.mask=sel.mascara;

//função para quando o mouse passa em cima do objeto do combobox
function overNome(e:Event) {
sel.aqui.y=0;
//tween para abrir o comboBox
Tweener.addTween(sel.fundo,height:sel.aqui.height,time:1}); Tweener.addTween(sel.mascara,height:sel.aqui.height,time:1});
//um jeito rapido de mudar a cor do objeto do comboBox
e.target.parent.bg.alpha=.8;
}
//função para quando o mouse sai de cima do objeto do combobox
function outNome(e:Event) {
//a "cor"
e.target.parent.bg.alpha=0;
//o seguraY é usado para voltar para o ultimo objeto clicado
sel.aqui.y=seguraY;
//tween para fechar o comboBox
Tweener.addTween(sel.fundo,{height:Nome.height,time:1}); Tweener.addTween(sel.mascara,{height:Nome.height,time:1});
}
//função para quando clicar no objeto do comboBox
function clickNome(e:Event) {
//chama a função que exibe o resultado
mostraResultado(e.target.parent.name);
//adiciona um objeto para para não atrapalhar na animação
sel.addChild(square);
//faz com que esse objeto suma depois de 1seg.
meuTempo.start();
//guarda a posição do clicado
seguraY = -(e.target.parent.y);
Tweener.addTween(sel.aqui,{y:-(e.target.parent.y),time:1});
var t:int=e.target.parent.name;
}

//função de mostra o resultado como o próprio nome já diz.
function mostraResultado(s:String){
trace(s);
resultado.text = xmlList1[int(s)];
}


//o objeto mágico criado para ajudar...
var square:MovieClip = new MovieClip();
square.graphics.beginFill(0xFF);
square.graphics.drawRect(0,0, 200, 5000);
//troque esse parametro para 1, para descobrir a mágica
square.alpha=0;
square.graphics.endFill();

//função do timer, já falei sobre isso no post passado.
var meuTempo:Timer=new Timer(1000); meuTempo.addEventListener("timer", FuncaoDoTimer);

function FuncaoDoTimer(e:TimerEvent) {
sel.removeChild(square);
meuTempo.stop();
trace("Timer chamado " + meuTempo.currentCount + " veses.");
}


Ufa, essa foi grande, por favor, qualquer dúvida comenta ai!.

Baixar fonte aqui

4 comentários:

Carlos Eduardo disse...

pow amigo gostei mesmo muito e é exatamente algo q eu tava precisando.. mas como eu ponho isso no meu JSP.. ou HTML...?

sisky disse...

Olá, este combobox está me ajudando muito em um projeto! Gostaria de saber como trocar a cor da fonte, a fonte e o background que cai em animação...
Obrigada!

Portal Moda disse...

Bacana seu tutorial... parabéns...
Me tira uma dúvida, e se nesse caso eu quiser chamar outro combobox no lugar campo txt?
exemplo... ao clicar em "flash" ele me mostra outro combobox com outras opções relacionado ao "flash"...
Abraço,
Obrigado!

Unknown disse...

Ola..estou ha dias procurando um exemplo de combo dupla, ou seja..seleciono assuntos como um menu e quando clico na segunda este direciona para um frame combinado com as duas .data das combos..nao acho essa solucao de jeito nenhum..achei em action 1..mas nao serve..tem como me ajudar
mirian.pavani@hotmail.com
obrigada