Meus Tutoriais

Tutoriais, Design, Programação, Linux e Tecnologia.

Painel de slides de destaque

dezembro 13th, 2007 by Lucas

flash.jpg1º Passo - Preparando o layout

Bom nada de difícil até aqui, criaremos um .fla novo, com as seguintes configurações:

Imagem 1

Bom, o esquema das camadas também é interessante, duas apenas, actions e mcSlide

Depois podemos desenhar o primeiro MovieClip, instanciado e nomeado como mcAlvo:

Image 2

O mcAlvo deve ser do tamanho de nossas fotos de preferência, ele vai ficar dentro do mcSlide ao final.

Agora desenharemos o mcInfo, responsável por exibir as informações textuais de cada slide. Dentro dele desenharemos dois TextFields, tTitulo e tDesc (instancias):

Imagem 3

Por fim, colocaremos nossos MovieClips já feitos, dentro de nosso conteiner, no caso um mc novo, chamado e instanciado como mcSlide(no palco):

Imagem 4

Para melhor compreensão recomendo baixar os arquivos no final do tutorial ;)

2º Passo - A classe Slide

Como de praxe, criei uma classe, devidamente comentada, para o controle das operações e também já praticarmos um pouco de OOP.

Classe Slide (Slide.as):

class Slide extends MovieClip {

//declaração das vars de nossa classe…
public var mcAlvo:MovieClip;
public var mcAlvo1:MovieClip;
public var mcAlvo2:MovieClip;
public var mcInfo:MovieClip;
//variáveis estáticas, na minha opnião, são mais fáceis
//de trabalhar em operações de tempo e assincronicidade…

public static var FIRST_SLIDE:Boolean = true;
public static var INIT_TIME:Date;
public static var LAST_TIME:Date;
public static var DATA:Array = new Array();
public static var INDEX_DATA:Number = 0;
public static var MCL_IMG:MovieClipLoader = new MovieClipLoader();
public static var SHOW_NEXT:Boolean = false;
public static var MC_ALVO:MovieClip;
public static var TIMER:Number;
public static var UPDATE_TIME:Number = 5;

//function Main, que é chamada na criação de nosso mc de slides…
function Slide(){

//setamos ao nosso MovieClipLoader comum, aonde estará seus eventos…
Slide.MCL_IMG.addListener(Slide);
//aqui criamos, apartir do mcAlvo desenhado no mc, os dois extras
//que usaremos para o carregamento dos slides. Com swapDepths, já os
//enviamos para trás do mc que conterá as informações…

(mcAlvo1 = mcAlvo.duplicateMovieClip(”mcAlvo1″, 1)).swapDepths(mcInfo);
(mcAlvo2 = mcAlvo.duplicateMovieClip(”mcAlvo2″, 2)).swapDepths(mcInfo);
Slide.MC_ALVO = mcAlvo1;

//aqui iniciamos o verificador de Timer para transição de slides
//o timer e responsavel, pela verificação de mc carregado e se já deu o
//tempo para exibirmos o próximo slide. A classe Delegate, é muito util
//para eventos e intervals, dado que podemos trabalhar facilmente com
//escopos (se não entenderam fica pra outra ;) ….

Slide.TIMER = setInterval(mx.utils.Delegate.create(this, this.nextSlide), 10);

mcAlvo._visible = false;

}

public static function set dataProvider(data:Array):Void
{
//funçao simples, método set, usamos para definir nosso provider de dados…
Slide.DATA = data;
if(Slide.DATA.length > 0){
//data definida, se tiver algum slide no array, já começa a operação do primeiro slide…
//define em que slide estamos atualmente, o tempo que inicia para o timer, e também declara o tempo final
//para então iniciar, com MovieClipLoader, o carregamento dos slides…

Slide.INDEX_DATA = 0;
Slide.INIT_TIME = new Date();
Slide.MCL_IMG.loadClip(Slide.DATA[Slide.INDEX_DATA].src, Slide.MC_ALVO);
Slide.LAST_TIME = new Date();
}
}

public static function onLoadStart(mcAlvo:MovieClip):Void
{
//no início do carregamento do próximo slide, definimos que ainda não pode ser exibida a próxima imagem…
Slide.SHOW_NEXT = false;
}

public static function onLoadProgress(mcAlvo:MovieClip, bL:Number, bT:Number):Void
{
//caso necessite do evento de progresso no carregamento…
}

public static function onLoadComplete(mcAlvo:MovieClip):Void
{
//caso necessite do evento de carregamento completo…
}

public static function onLoadInit(mcAlvo:MovieClip):Void
{
//com o carregamento completo, e imagem já exibida no movieclip,
//podemos liberar a exibição, a função nextSlide, cuidará do timer…

Slide.SHOW_NEXT = true;
mcAlvo._parent.nextSlide();
}

public function nextSlide():Void
{
//fazendo as verificações se podemos passar para o próximo slide,
//primeiro se esta liberado o carregamento, depois se já deu o tempo de exibição…

if(Slide.SHOW_NEXT
&& (Slide.FIRST_SLIDE == true || (Slide.LAST_TIME - Slide.INIT_TIME) > (UPDATE_TIME * 1000))){
//existe uma exceção de ser o primeiro slide, pois não precisa esperar
//o timer, então logo após o primeiro, declaramos a var como false, para
//para que as próximas corram normalmente…

Slide.FIRST_SLIDE = false;
//esses objetos DATE são para a diff de time entre os slides…
Slide.INIT_TIME = new Date();
Slide.LAST_TIME = new Date();
//
//como podem notar, ocorre um revesamento entre dois mcs, para que exista um
//sempre um slide carregando no background. Abaixo ocorre o revesamento dos dois.
//É também nessa parte que podes implementar algum efeito de transição, fica a gosto…

Slide.MC_ALVO.swapDepths((Slide.MC_ALVO == mcAlvo1 ? mcAlvo2 : mcAlvo1));
//preenchendo as informações e setando o link…
mcInfo.tTitulo.text = Slide.DATA[Slide.INDEX_DATA].title;
mcInfo.tDesc.text = Slide.DATA[Slide.INDEX_DATA].desc;
Slide.MC_ALVO.link = Slide.DATA[Slide.INDEX_DATA].href;
Slide.MC_ALVO.onRelease = function():Void
{
getURL(this.link);
}
//
//bom abaixo, podemos ver que ocorre o coordenamento dos slides,
//em qual mc vai ser carregado a próxima foto, e em que slide estamos
//atualmente. Quando a esse index do slide, quando chegar ao último //logicamente, com o if, voltamos ao primeiro…

Slide.MC_ALVO = Slide.MC_ALVO == mcAlvo1 ? mcAlvo2 : mcAlvo1;
if(Slide.INDEX_DATA+1 >= Slide.DATA.length) {
Slide.INDEX_DATA = 0;
} else {
Slide.INDEX_DATA++;
}
//
//por fim carregamento o slide…

Slide.MCL_IMG.loadClip(Slide.DATA[INDEX_DATA].src, Slide.MC_ALVO);
} else {
//esse else é executado, quando a foto ainda não foi carregada
//ou quando ainda não teu o tempo de transição, ou as duas opções
//juntas :D Reparem que sempre atualizamos o objeto date para verificação
//de tempo…

Slide.LAST_TIME = new Date();
}
}
}

A Classe também será disponibilizada no final do artigo.

3º Passo - Voltemos ao Flash

De volta ao flash, na camada actions colocaremos o nosso código para carregar o XML, com o esquema de nosso slide:

//em nosso fla, a princípio fica apenas o código para carregarmos o XML com os dados…
var xmlDados:XML = new XML();
xmlDados.ignoreWhite = true;
//nada de novo, carregamento de XML externo normal…
xmlDados.onLoad = function(sucesso:Boolean):Void
{
if(sucesso){
var tempData:Array = new Array();
//listando nodes, transformando-as em objeto, e armazenando
//no nosso array de dados, esse aí acima :D

var f:XMLNode = this.firstChild.childNodes[0];
do {
var tempObj:Object = {
src: f.attributes.src,
href: f.attributes.href,
title: f.attributes.title,
desc: f.childNodes[0].nodeValue
}
tempData.push(tempObj);
delete tempObj;

} while(f = f.nextSibling);
//
//agora sim, enviamos os dados a nossa Classe Controladora dos slides…

Slide.dataProvider = tempData;
}
}
xmlDados.load(”slides.xml”);

Agora nosso último passo no flash, que é definir ao mcSlide, sua classe.

Clique com o botão direito sobre o mcSlide na biblioteca(library), e vá em linkage, para configurar conforme abaixo:

Imagem 5

4º Passo - XML

E para finalizar, nossa estrutura de XML, com os nosso dados para o painel, salve como slides.xml:

<?xml version=”1.0″ encoding=”UTF-8″?>
<slides>
<slide src=”fotos/foto1.jpg” mce_src=”fotos/foto1.jpg” href=”link1.htm” mce_href=”link1.htm” title=”Teste 1″><![CDATA[Slide um]]></slide>
<slide src=”fotos/foto2.jpg” mce_src=”fotos/foto2.jpg” href=”link2.htm” mce_href=”link2.htm” title=”Teste 2″><![CDATA[Slide dois]]></slide>
<slide src=”fotos/foto3.jpg” mce_src=”fotos/foto3.jpg” href=”link3.htm” mce_href=”link3.htm” title=”Teste 3″><![CDATA[Slide três]]></slide>
</slides>

Explicando o XML:

Cada nó (linha), é um slide nosso, o atributo src é a localização da imagem, href é o link do destaque, title é o título do mesmo e o conteudo do nó é a nossa chamada.

Nosso painel está pronto, agora é só testar!

Fonte:

http://www.flashmasters.net/?site=tutoriais&cat=4&id=79

Share and Enjoy: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • bodytext
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google

Posted in Design, Flash

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.

Pesquisar posts


Categorias

Tutoriais Anteriores

Sites Amigos

Anúncio provido pelo BuscaPé
BlogBlogs
VoceSabia