Ir para conteúdo

POWERED BY:

Arquivado

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

linoart

[Resolvido] imagem errada carregada na thumb.

Recommended Posts

Pessoal, estou fazendo uma galeria de imagens onde tem nove thumbs onde é carregada uma imagem dentra de cada thumb. Nessa galeria uma mesma imagem pode ser carregada em 3 thumbs por exemplo.

 

O problema é que a imagem que foi carregada na thumb não condiz com a imagem que ele deveria carregar. Deixo embaixo o código pra darem uma olhada:

 

aThumbsObj = [conjThumbs.thumb0, conjThumbs.thumb1, conjThumbs.thumb2, conjThumbs.thumb3, conjThumbs.thumb4, conjThumbs.thumb5, 
conjThumbs.thumb6, conjThumbs.thumb7, conjThumbs.thumb8];
aImagensThumb =  new Array("0.jpg", "1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "8.jpg");
aImagensGrande = new Array("img0.jpg", "img1.jpg", "img2.jpg", "img3.jpg", "img4.jpg", "img5.jpg", "img6.jpg", "img7.jpg", "img8.jpg");
			
var i:int = 0;
while ( i < aThumbsObj.length)
{
   randomImagens = Math.random() * aImagensThumb.length;
   trace(randomImagens)
   loadThumb = new Loader(); 
   //aThumbsObj[i].addChild(loadThumb);
   loadThumb.name = "load" + i;				
   // Pego a imagem que cada thumb recebeu e jogo numa nova array, que será usada na função clicouThumb
   // para saber qual imagem GRANDE será carregará quando clicar numa determinada thumbs.
   aImgGrandeOrdem.push(randomImagens);
   trace("imagem thumb é: " + randomImagens + "    " + "e thumbObj dela é " + aThumbsObj[i].name);
   loadThumb.load(new URLRequest("../img/thumbs/" + aImagensThumb[randomImagens]));
   loadThumb.contentLoaderInfo.addEventListener(Event.COMPLETE, carregaImagemThumb, false, 0, true);			
   i++;
}

public function carregaImagemThumb(evt:Event):void
{			
   if(aThumbsObj[num].numChildren ==1)  // numCrildren == 1 pq existe um shape dentro da thumb.
   {
      var mc:Object = Object(loadThumb.content);
      aThumbsObj[num].addChild(evt.target.content);
      aThumbsObj[num].buttonMode = true;
      aThumbsObj[num].addEventListener(MouseEvent.CLICK, clicouThumb, false, 0, true);
      num++;
      trace(num)
      if(num ==9)
      {
         loadThumb.removeEventListener(Event.COMPLETE, carregaImagemThumb);			
      }
				
   }
}

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está carregando todas as imagens de uma só vez, e umas são mais pesadas que as outras, por isso elas não vão carregar na ordem que você solicitou, então sua variável "num" será imprecisa.

 

Então você pode filtrar o id do objeto baseado no nome que você deu a ele.

 

Ficaria assim:

 

function carregaImagemThumb (evt:Event):void
{
	// Resgatando o indice do objeto que terminou de ser carregado
	var $id:int = int(String(evt.target.name).substring(String("load").length));
	// Agora que você tem o id real, pode seguir com sua lógica.
	if (aThumbsObj[$id].numChildren == 1)
	{
		var mc:Object = Object(loadThumb.content);
		aThumbsObj[$id].addChild (evt.target.content);
		aThumbsObj[$id].buttonMode = true;
		aThumbsObj[$id].addEventListener (MouseEvent.CLICK, clicouThumb, false, 0, true);
	}
	// Neste ponto você poderia remover o evento de qualquer forma, em cada um deles e não somente no ultimo
	evt.target.removeEventListener (Event.COMPLETE, carregaImagemThumb);
}

Acho que isso pode dar certo.

 

Outro detalhe é que você está sorteando as imagens que vão carregar, assim, nada impede da mesma imagem ser carregada em outro thumb.

 

Att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Foxn, mas não funcionou.

Dei um trace na variável $id e só está retornando '8'. E as imagens só estão sendo adicionadas na thumb8.

 

Não sei se é importante notar mas evt.target.name não funcionou pois acusa que a propriedade name não existe em LoaderInfo. Então coloque loadThumb.name.

 

Abraços,

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Foxn, mas não funcionou.

Dei um trace na variável $id e só está retornando '8'. E as imagens só estão sendo adicionadas na thumb8.

 

Não sei se é importante notar mas evt.target.name não funcionou pois acusa que a propriedade name não existe em LoaderInfo. Então coloque loadThumb.name.

 

Abraços,

 

Verdade, ficou faltando um "content.parent".

 

 

var $id:int = int(String(evt.target.content.parent.name).substring(String("load").length));

De qualquer forma, segue um exemplo funcionando:

 

var carregado:Function = function($evento:Event):void
{
	var $id:int = int(String($evento.target.content.parent.name).substring(String("imagem").length));
	$evento.target.content.y = height;
	addChild($evento.target.content);
	$evento.target.removeEventListener(Event.COMPLETE,carregado);
	trace($id);
}

var imagem:Loader

// Primeira imagem
imagem = new Loader(); 
imagem.name = "imagem1";
imagem.contentLoaderInfo.addEventListener(Event.COMPLETE,carregado);
imagem.load(new URLRequest("http://static.imasters.com.br/img/bd/2332.jpg"));

// Segunda imagem
imagem = new Loader();
imagem.name = "imagem2";
imagem.contentLoaderInfo.addEventListener(Event.COMPLETE,carregado);
imagem.load(new URLRequest("http://static.imasters.com.br/img/bd/2333.jpg"));

// Terceira imagem
imagem = new Loader();
imagem.name = "imagem3";
imagem.contentLoaderInfo.addEventListener(Event.COMPLETE,carregado);
imagem.load(new URLRequest("http://static.imasters.com.br//imasters/img/topo/logo.png"));

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso ai, Foxn. Foi certinho. Obrigado!!

 

Agora fiquei só com dúvida na lógica, pq eu dei um trace na var $id e sempre mostra 6,0,2,7,1,8,4,3,5 nessa ordem.

Não deveria mostrar randomicamente, já que é as imagens são escolhidas com random?

 

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.