Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera o causo é o seguinte, estou brincando um pouco com AS2 antes de me aventurar
no AS3, e resolvi fazer aquele efeito classico do Mac OS, aquele que você passa o mouse o
objeto atual aumenta seu tamanho e os outros se distanciam...
O problema é o seguinte se eu coloco o mouse em um dos objetos e tiro, a animação fica
perfeita, mas se eu passo o mouse e não espero a animação acabar e coloco o mouse sobre
outro objeto, a animação buga tudo, os objetos começam a ficar um sobre o outro, vira um
CAOS...
Será que algum programador mais experiente pode me dar uma mão? o problema está nas
funções, deslizaOver e deslizaOut... segue o código:
/
configuração do script
/
var obj = new Array("a1", "a2", "a3", "a4"); //objetos que vão sofrer o efeito
var scale = 100; //soma à escala quando o mouse estiver sobre
var speed = 1; //velocidade em milesegundos
var distaFixa = 0.5; //distancia que os objetos ganham uns dos outros ao rodar animação
/ *
variaveis do sistema, não mecha
*/
var objAtual;
/ *
efeito "aumenta"
*/
function fx_over(object) {
i = 0;
object.overPlay = true;
object.outPlay = false;
function delay(){
if( (object._xscale >= 100+scale) || (!object.overPlay) ){
clearInterval(interval);
stoped = true;
}
object._xscale++;
object._yscale++;
deslizaOver();
}
var interval = setInterval(delay, speed);
}
/ *
efeito "diminui"
*/
function fx_out(object) {
i = 0;
object.overPlay = false;
object.outPlay = true;
function delay(){
if( (object._xscale <= 100) || (!object.outPlay) ){
clearInterval(interval);
stoped = true;
}
object._xscale--;
object._yscale--;
deslizaOut()
}
var interval = setInterval(delay, speed);
}
/ *
efeito "deslizaOver"
*/
function deslizaOver(){
trace("<- ->");
distancia = -distaFixa;
for(i=0; i<obj.length; i++) //garante que todos os objetos da lista serão movimentados
{
if(distancia == 0) distancia = distaFixa; //se distancia é igual a zero quer dizer que o onjeto cuso o mouse está sobre já passou, então inverta a direção do movimento
if(this[obj[i]] == objAtual) distancia = 0; //caso esse seja o objeto que o mouse está sobre, não mover ele de lugar
this[obj[i]]._x = this[obj[i]]._x+distancia; //executa o movimento
}
}
/
efeito "deslizaOut"
/
function deslizaOut(){
trace("-> <-");
distancia = distaFixa;
for(i=0; i<obj.length; i++) //garante que todos os objetos da lista serão movimentados
{
if(distancia == 0) distancia = -distaFixa; //se distancia é igual a zero quer dizer que o onjeto cuso o mouse está sobre já passou, então inverta a direção do movimento
if(this[obj[i]] == objAtual) distancia = 0; //caso esse seja o objeto que o mouse está sobre, não mover ele de lugar
this[obj[i]]._x = this[obj[i]]._x+distancia; //executa o movimento
}
}
/ *
adicionar as funções a todos os objetos do array obj
*/
for(i=0; i<obj.length; i++){
this[obj[i]].onRollOver = function(){ onEnterFrame = fx_over(this); objAtual =this; }
this[obj[i]].onRollOut = function(){ onEnterFrame = fx_out(this); objAtual =this}
}Carregando comentários...