18

Nov

Caixa Expansivel - Update

Escrito por Gonçalo Martins   

 

caixa espansivelÀ algum tempo atrás forneci um exemplo de uma caixa expansível que poderia criar em Mootools. O exemplo dessa mesma caixa pode ser visto aqui. Ao longo dos últimos tempos tenho recebido alguns e-mails a perguntar como implementar um indicador de que a caixa está aberta ou fechada.

 

Em relação à caixa expansível que criei anteriormente a única coisa que mudará é o javascript, e a adição de uma nova classe ao HTML e um pouco de CSS.

 

O novo Javascript ficará algo do género:

javascript
  1. <script type="text/javascript">
  2. window.addEvent('domready', function(){
  3.     var mySlide = new Fx.Slide('section');
  4.  
  5.    
  6.     $('toggle').addEvent('click', function(e){
  7.         e = new Event(e);
  8.  
  9.         mySlide.toggle();
  10.                
  11.         if($('toggle').hasClass('icon')){
  12.             $('toggle').removeClass('icon');
  13.  
  14.             $('toggle').addClass('icon2');
  15.  
  16.         } else {
  17.             $('toggle').removeClass('icon2');
  18.  
  19.             $('toggle').addClass('icon');
  20.                
  21.         }
  22.        
  23.         e.stop();
  24.  
  25.     });
  26.  
  27. });
  28.  
  29. </script>

 

A unica coisa que muda no código em relação ao anterior é a adição das seguintes linhas:

php
  1. if($('toggle').hasClass('icon')){ //detecta se possui a class 'icon' junto a id="toggle" no HTML   
  2.     $('toggle').removeClass('icon');
  3. //Se a class for 'icon', remove a class
  4.     $('toggle').addClass('icon2');
  5. //Depois de remover a class icon adiciona a classe 'icon2', que irá mudar a imagem
  6. } else { //para abrir
  7.     $('toggle').removeClass('icon2');
  8. //detecta a class 'icon2' adicionada quando se fechou, e remove-a
  9.     $('toggle').addClass('icon');
  10. //adiciona de novo a class 'icon'              
  11. }

 

O HTML:

html
  1. <h2><span>
  2. <a href="#" id="toggle" class="icon">Secção</a>
  3. </span></h2>
  4. <div id="section">
  5. <div>
  6. <!-- O seu conteúdo aqui -->
  7. </div>
  8. </div>

 

O CSS:

css
  1. .icon {background:url(img/close.png)bottom left no-repeat;
  2.  
  3.     font-size: 16px;
  4.  
  5.     padding-left: 17px;
  6.  
  7.     margin-left: 2px;
  8.  
  9.     margin-bottom: 5px;
  10.  
  11.     List-style:none;
  12. }
  13.    
  14. .icon2 {background:url(img/open.png)bottom left no-repeat;
  15.  
  16.     font-size: 16px;
  17.  
  18.     padding-left: 17px;
  19.  
  20.     margin-left: 2px;
  21.  
  22.     margin-bottom: 5px;
  23.  
  24.     List-style:none;
  25. }

 

Como melhorar:
O meu conselho é utilizar uma CSS Sprite para realizar o load das imagens open e close! Desta forma não se notará um pequeno desfasamento da primeira vez que o utilizador carregar na caixa para a fechar!

 

 


Gostou deste Artigo?
Subscreva o feed RSS ou reguiste-se na Newsletter do WebLouca, agora!
Categoria:
Se preferir, pode ainda deixar um comentário

PATROCINADORES


cometarios
Trackback(0)
joabel
Novembro 30, 2008

Muito bom o artigo, porém gostaria de na mesma página colocar várias dessas caixas. Tentei isso, porém somente a primeira desliza, as outras nao...como faço isto?abraço e parabens

GoncaloM
Novembro 30, 2008
http://weblouca.com

@joabel

A forma mais simples de o fazer passa por recopiar o código acima e alterar as seguintes linhas:

no JS:
var mySlide1 = new Fx.Slide('section1');

$('toggle1').addEvent('click', function(e){

if($('toggle1').hasClass('icon')){
$('toggle1').removeClass('icon');
$('toggle1').addClass('icon2');
} else {
$('toggle1').removeClass('icon2');
$('toggle1').addClass('icon');
}

NO HTML:
id="toggle1"
id="section1"


Creio que dá para entender as variáveis que necessitam de ser diferentes ;)

Paulo
Julho 22, 2009

Olá.

Fiz, e ficou show de bola.. porém, gostaria de saber, se quando eu carregar a pagina, as caixas ja aparecem fechadas.. pois deste modo, quando carrego, as caixas ja aparecem abertas, entende?

O que posso fazer?


Obrigado.

GonçaloM
Julho 28, 2009
http://weblouca.com

@Paulo
Para as caixas aparecerm fechadas a forma mais facil e directa é adicionar a linha:
mySlide.hide();

após:
var mySlide = new Fx.Slide('section');

ficando:
var mySlide = new Fx.Slide('section');
mySlide.hide();

Elias Luiz
Janeiro 05, 2010
http://www.extremos.com.br

É possivel fazer com que após um determinável tempo (programável) a caixa feche automaticamente?

Victor
Janeiro 15, 2010
http://www.terciovictor.com.br

Olá Gonçalo, estou tendo problemas.

Quando adiciono a linha: "mySlide.hide();"
tenho problemas com o icone, pois ao invés de aparecer o + continua aparecendo o -, como se fosse para minimiza-la. Quando não se tem esta linha funciona ok.

Será que estou fazendo algo errado? ou devo alterar algo no script para que o icone mude quando adiciono esta linda?

Muito obrigado.

Victor
Janeiro 15, 2010
http://www.terciovictor.com.br

Opa, informo que já consegui! Obrigado.

Robson
Fevereiro 24, 2010

Olá cara eu naum to consequindo implementar no site! eu coloco o código na pagina em PHP e não expandi e nem fica pequena! e depois tento dar um include e fica na mesma, gostaria de saber se naum é copmpativel com php ou algo do tipo!

Felipe
Maio 07, 2010
http://lipedesign.net

da hora parabens

buy essay
Julho 07, 2010
http://www.gogetessays.com

It’s not hard to get information or buy an essay at the essays writers just about this topic.


Escreva o seu Comentario
 
  pequeno | maior
 

busy
 

Patrocinadores do Site

Subscrever Feed



Artigos

Ultimos artigos
jsimageNeste artigo vou-lhe demonstrar como rodar imagens e qualquer elemento desde div a span co...
phpthumbAtualmente praticamente todos os websites possuem a necessidade de listar os seus artigos...
benchmarksA pouco mais de um ano falei sobre uma ferramenta para otimizar imagens (Artigos/optimize...
phpimageredRedimensionar uma imagem com php pode ser um processo complicado. Quando por exemplo um wo...
linksafiliadosNo inicio do ano escrevi um artigo onde dáva a conhecer uma forma de criar links de afili...