Ir para conteúdo

Arquivado

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

JohwMatos

Carregar - galeria

Recommended Posts

Seguinte galera, vê ai se vocês podem me ajudar num probleminha aqui.

 

Tenho uma galeria em flash, que pega as imagens de um xml. Nessa galeria tem uma lista de thumbnails, e ao lado a imagem em tamanho maior. Porém há muitas thumbs, e são carregadas todas elas antes da foto em tamanho maior. Ou seja, tenho que esperar carregar todas as miniaturas antes de aparecer as imagens ao lado. Quando eu clico em uma miniatura, (não tendo sido tudo carregado ainda) obedece o comando, porém ainda tenho de esperar tudo ser carregado, para começar a ver as fotos em tamanho maior.

 

Tem alguma solução para eu fazer com que a foto em tamanho maior seja carregada (ao clicar na sua respectiva miniatura), ao mesmo tempo em que são carregadas as miniaturas?

 

 

Tá aqui o AS:

 

var meuXML:XML = new XML();

meuXML.ignoreWhite = true;

meuXML.onLoad = function():Void{
	
	
	
	altura = (thumb._height*meuXML.childNodes[0].childNodes.length+meuXML.childNodes[0].childNodes.length*2);

	
	i=0;


	
	
	 while (true) { 
		 if (i >= meuXML.childNodes[0].childNodes.length ) { 
		 
			break; 
		 } 

	
	
		duplicateMovieClip("thumb","thumb"+i,i+1);
		thumbs = _root.tudo_mc["thumb"+i];

		if (i%3==0) { thumbs._x = 0; }
		if (i%3==1) { thumbs._x = thumb._width+10; }
		if (i%3==2) { thumbs._x = thumb._width+thumb._width+20; }

		if (i%1==0) { thumbs._y = (thumb._height)* Math.floor(i/3) + Math.floor(i/3)*10; }
		if (i%2==0) { thumbs._y = (thumb._height)* Math.floor(i/3) + Math.floor(i/3)*10;	}
		if (i%3==0) { thumbs._y = (thumb._height)* Math.floor(i/3) + Math.floor(i/3)*10; }
		


		var MCL1:MovieClipLoader = new MovieClipLoader();

		MCL1.loadClip(meuXML.childNodes[0].childNodes[i].attributes.thumb,thumbs.mostra);
		thumbs.onEnterFrame = function():Void{

			progresso1 = MCL1.getProgress(this.mostra);

			this.pct_thumb.text = Math.ceil(progresso1.bytesLoaded / progresso1.bytesTotal * 100) + "%";

			progresso1.bytesLoaded == progresso1.bytesTotal ? this.pct_thumb._visible = false : this.pct_thumb._visible = true;
		}

		thumbs.atual = i;

		thumbs.btn.useHandCursor = true;

		
		
		
		// PRIMEIRA FOTO
	
			if (i==0) {
				thumbs.btn.onEnterFrame = function():Void{
					
					
					var MCL1:MovieClipLoader = new MovieClipLoader();
					
					MCL1.loadClip(meuXML.childNodes[0].childNodes[this._parent.atual].attributes.grande,_root.mc);
					
					this.onEnterFrame = function():Void{
						
						progresso2 = MCL1.getProgress(_root.mc);
						_root.pct.text = Math.round(progresso2.bytesLoaded/progresso2.bytesTotal*100) + "%";
						progresso2.bytesLoaded == progresso2.bytesTotal ? _root.pct._visible = false : _root.pct._visible = true;
						progresso2.bytesLoaded == progresso2.bytesTotal ? _root.carregando._visible = false : _root.carregando._visible = true;
						
					}
					
					_root.descricao.text = "Código: " + meuXML.childNodes[0].childNodes[this._parent.atual].attributes.desc;
					
					
				}
			} // FIM DA PRIMEIRA FOTO
		
		
		
		
		
		thumbs.btn.onRelease = function():Void{
			
			
			
			var MCL2:MovieClipLoader = new MovieClipLoader();
			
			MCL2.loadClip(meuXML.childNodes[0].childNodes[this._parent.atual].attributes.grande,_root.mc);
			
			this.onEnterFrame = function():Void{
				progresso2 = MCL2.getProgress(_root.mc);
				_root.pct.text = Math.round(progresso2.bytesLoaded/progresso2.bytesTotal*100) + "%";
				progresso2.bytesLoaded == progresso2.bytesTotal ? _root.pct._visible = false : _root.pct._visible = true;
			}
			
			 _root.descricao.text = "Código: " + meuXML.childNodes[0].childNodes[this._parent.atual].attributes.desc;
			
			
			
			
		}
		
		thumbs.btn.onRollOver = function():Void{
			
			_root.tudo_mc["thumb"+this._parent.atual].mostra._alpha = 60;

			
		}
		
		thumbs.btn.onRollOut = function():Void{
			
			_root.tudo_mc["thumb"+this._parent.atual].mostra._alpha = 100;
			
			
		}
	
		i++;
		
		
		
	
	
	} 
	
	
	
	
	
	

	_root.rolagem.drag.onPress = function():Void{
		
		var xmin = this._x;
		var xmax = this._x;
		var ymin = 0;
		var ymax = this._parent.fundo._height - this._height;
		
		this.startDrag(false, xmin, ymin, xmax, ymax);
		
		this.onRelease = this.onReleaseOutside = function():Void{
			stopDrag();
			delete this.onMouseMove();
		}
		
		
		
		this.onEnterFrame = function():Void{
			
				
				_root.tudo_mc._y += (-Math.round((this._y / ymax) * (altura/(5/2) - _root.rolagem._height - (meuXML.childNodes[0].childNodes.length * 2) + 25)) - _root.tudo_mc._y )/3 + 15;
			
				
		}
	}
		
		




}

// carregando o arquivo XML
meuXML.load("galeria/galeria1b.xml?cache=" + getTimer());

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom acredito que seja por culpa do while :(

 

Que ele ta impedindo de abrir a foto...

 

Se você fizer com um for e colocar as funções de abrir as fotos fora do for...

 

Talvez vai ser mais fácil e você terá permissão de acessar o clip de fora...

 

Mas enquanto tiver dentro do while ele vai fica fazendo até termina... depois disso que ele vai aceitar qualquer outra ação.

Até lá ele vai ignorar.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah berseck, agora acho que nem da mais pra posta no fórum de flash xD. Quando o SilverFox tava aqui moderando ainda dava tempo de ler sauhasuhasu

Ta fazendo um bom trabalho, andei observando nos ultimos tempos está de parabéns ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Respondo quando dá :S

 

Não é todo dia que da pra responder durante o dia... ai faço bateria de resposta quando volto pra casa :P

 

Trabalho ta me comendo O_O

 

rs mas ta tranquilo....

 

Acho que é o while mesmo o problema dele... andei testando aqui... se coloca as funções fora mesmo com while ainda da pra chama a função... agora se a função estiver dentro do while complica :(

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Afinal Jow, qual a finalidad desse while ai ? Também estou sem entender o.O

Compartilhar este post


Link para o post
Compartilhar em outros sites

A finalidade do while é enquanto não atingir a contição... ele vai ficar repetindo

 

No caso enquanto o resultado da busca do xml for verdadeiro ele vai continuar procurando sem parar... quando der falso vai dar break...

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

dae Berseck beleza??

 

Então cara, para colocar a função RELEASE separado, tenho que criar outro while, pois aquela esta assim:

 

thumbs = _root.tudo_mc["thumb"+i];

thumbs.btn.onRelease = function():Void{...

 

ou seja, a "thumbs" tambem depende da variavel "i".

 

 

mas tudo bem , criei um while separado.

a função onRelease funciona, tanto dentro do mesmo while, quanto fora, pois eu vejo a descrição da foto sendo alterada (text), quando clico nas thumbs.

 

mas nao carrega a foto enquanto nao carrega TODAS as menores.

 

 

ja utilizei FOR, ja utilizei uma funçao que chamava outra no final, ao invez do while, todos com o mesmo resultado.

 

 

o loop ele executa rapido, pois abre todas as molduras das thumbs instantaneamente, depois que vai abrindo as thumbs. ou seja, as funçoes ja foram todas lidas. mas... o problema continua.

 

 

eu precisava de alguma função que parasse o carregamento das thumbs enquanto nao carrega a foto grande desejada.

 

 

Agradeço desde já! Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por curiosidade joga um trace

 

Dentro da função de carregamento

thumbs.btn.onRelease = function():Void{
			var MCL2:MovieClipLoader = new MovieClipLoader();
			MCL2.loadClip(meuXML.childNodes[0].childNodes[this._parent.atual].attributes.grande,_root.mc);
			this.onEnterFrame = function():Void{
				progresso2 = MCL2.getProgress(_root.mc);
		trace(progresso2.bytesLoaded);
				_root.pct.text = Math.round(progresso2.bytesLoaded/progresso2.bytesTotal*100) + "%";
				progresso2.bytesLoaded == progresso2.bytesTotal ? _root.pct._visible = false : _root.pct._visible = true;
			}
			 _root.descricao.text = "Código: " + meuXML.childNodes[0].childNodes[this._parent.atual].attributes.desc;
		}

Se esse trace começar a contar assim que você clicar é pq ele ta fazendo na mesma hora... se ele só começar a contabilizar depois é pq ta com problema

 

Você deveria relacionar cada thumb com a foto principal usando targetPath(clip) que iria funcionar melhor.

As chances de dar erro é menor e você não precisaria de um loop para isso... pode colocar dentro do mesmo loop mesmo só que relacionando o nome do grande com o pequeno....

 

Não sei se deu pra entender bem

 

Mas custa nada dar uma olhada a respeito.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Berseck,

 

o trace que colocamos no código deu resultado, ao clicar na thumb, ele começa a exibir um numero (sempre o mesmo independente de qual thumb eu clique), repetidamente, porem sempre o mesmo, até que carregue tudo.

 

depois que carrega todas as thumbs, esse numero zera, e vai aumentando até atingir o numero de bytes da foto grande atual.

 

 

e caso eu clique em 3 thumbs enquanto ele está carregando todas thumbs... depois que carregar todas as thumbs, o trace apresenta carregando os bytes da primeira, depois da segunda, e depois da terceira. por algum tempo.. exemplo:

-------------

-> sem clicar em nada

 

 

14147 -> ao clicar em qualquer thumb (sempre o mesmo numero)

14147

14147

14147

0 -> depois de carregar todas thumbs, começa a carregar cada thumb q eu cliquei.

200

500

23000

23000

23000

0 -> essa repeticao depende do numero de thumbs que eu cliquei, mesmo antes de carregar todas.

300

600

15000

15000

15000

...

 

quanto ao targetPath(clip), na entendi onde posso usar, nunca usei esta função!!

 

Muitissimo grato pela atenção!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom então como pode perceber, sua função ta furada :D

 

Ele so corre depois de carregar tudo você deve procurar outro metodo de carregar tudo separadamente.

 

Eu aconselharia usar MovieClipLoader com um onLoadInit e onLoadProgress

 

Ia fica muito mais fácil de trabalhar, e também fazendo com que as fotos fossem carregadas 1 a uma por vez liberando assim o click nelas

 

targetPath(instancia) ele vai pegar o nome do clip que você ta pergutando... logo se sua thumb se chamar imagem_g ou imagem_p vocÊ vai dar um split no _ e vai mudar o final da imagem ;P

 

para dar o novo load.

 

exemplo aqui:

http://forum.imasters.com.br/index.php?showtopic=336703

 

Codigo que foi usado

function onLoadInit(duplicate){
scala(duplicate)
if(duplicate._width <>
duplicate._x = duplicate._x + ((50 - duplicate._width)/2);
}
redimensionar(alvo);
alvo._x = alvoX + (alvoWidth/2) - (alvo._width/2);
alvo._y = alvoY + (alvoHeight/2) - (alvo._height/2);
tamanho(duplicate);
duplicate.onPress = function(){
var string = targetPath(duplicate).split("-");
p = string[1];
p = p - 1;
if(max >= 10){
p = max+p;
}
var pic:String = fotos[p].toString();
mcl.loadClip(pic, alvo);
}
}

Veja que transformo em string e abro ela depois :)

 

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.