Академический Документы
Профессиональный Документы
Культура Документы
Passo a Passo de como criar um slider com Javascript setInterval e formatao CSS. O Cdigo fonte final encontra-se na Figura 10 - Cdigo Final. O slider permite a navegao entre as abas do slider, a pausa e despausa. Um exemplo em funcionamento do cdigo (com alguns incrementos) pode ser visto no link (Figura 1 - http://www.bigoff.com.br/):
http://www.bigoff.com.br/
Figura 1 - http://www.bigoff.com.br/
A motivao deste trabalho encontra-se na necessidade de se criar um Slider customizvel e de fcil alterao, que use funes simples em javascript e de fcil manuteno. Este cdigo livre e pode ser alterado, desde que as informaes do autor sejam mantidas, para isto basta adicionar a linha no incio de seu cdigo:
/*author: Autor: Emerson Shigueo Sugimoto, 2012*/
Figura 3 Arquivos Insira 4 imagens na pasta imagens, podem ser de qualquer tamanho. Para um melhor resultado melhor que sejam maiores ou iguais 450x300 (Figura 4).
As imagens usadas neste tutorial possuem as dimenses em cerca de 2560x1600. O CSS utilizado na pgina controla o tamanho das imagens no momento de exibi-las, portanto no se preocupe com os tamanhos. Se a imagem for muito pequena, o resultado no ser o ideal, mais a tcnica funciona mesmo assim. CSS usado (Figura 5): 2
<style type="text/CSS"> /*author: Autor: Emerson Shigueo Sugimoto, 2012*/ * {margin:0;padding:0;} img, input[type=image] {border:0;} input, select, textarea,input[type="submit"]:focus{outline:0 none;} body {margin:0;padding:0;font-family:Verdana, Geneva, sans-serif;fontsize:8pt;background:#FFF;} .clear {clear:both;} .sliderFrame { font: 11px Arial, sans-serif; margin:15pt auto; padding:25px; /*position: relative;*/ width: 900px; height: 300px; border: 1px solid rgb(200, 200, 200); } .sliderFrame #tmpSlideshowControls a {text-decoration:none; color:inherit;} div#sliderImg, .sliderInfo {float:left;} div#sliderImg { width:450px; height:332px; overflow:hidden; } div#sliderImg img { max-width:100%; max-height:95%; width: auto; height: auto; border: 1px solid rgb(244, 244, 244); overflow:hidden; } .sliderInfo { margin-left:15pt; width:425px; height:332px; overflow:hidden; } span#sliderTitulo { color: #b90f23; text-transform: uppercase; font: 14px Arial, sans-serif; margin:10px 0; } .sliderFrame .sliderInfo p { margin:10pt 0; font: 11px Arial, sans-serif; line-height: 1.75em; } .sliderDePor {font-size:13px; line-height:1.4em; margin-bottom:8pt;} .sliderDePor div {float:left;} .clsDe {text-decoration:line-through;color: #b90f23;} /*------------------*/ div#tmpSlideshowControls { /*position: absolute;*/ bottom: 15px; /*30*/ right: 11px; width: 300px; /*175*/ } div.tmpSlideshowControl { border: 1px solid #e1dece; float: left; margin: 0 5px 0 0; width: 28px; /*38*/
height: 24px; /*36*/ color: #554d31; font: 14px Arial, sans-serif; text-align: center; cursor: pointer; } div.tmpSlideshowControl span { line-height: 27px; vertical-align: middle; } div.tmpSlideshowControl:hover { border: 1px solid rgb(161, 155, 137); } </style>
Figura 5 - CSS A parte do cdigo CSS que cuida do tamanho das imagens (Figura 6):
div#sliderImg img { max-width:100%; max-height:95%; width: auto; height: auto; border: 1px solid rgb(244, 244, 244); overflow:hidden; }
As informaes que iro popular o slider so definidas atravs de uma estrutura simples em javascript (Figura 7):
<script type="text/javascript"> /*author: Autor: Emerson Shigueo Sugimoto, 2012*/ //--Dados das Ofertas ---// var oferta1 = { 'titulo':'Oferta 1', 'descSimples':'Venha se divertir em todas as estações do ano ! Ingresso para 1 dia no Rio Water Planet, por R$ 42,90, ou passaporte válido por 2 anos para 2 ou 4 ou 10 pessoas, por menos de R$ 1 por dia', 'linkComprar':'#comprar1', 'linkOferta':'#linkOferta1', 'valorDe':7.89, 'valorPor':5.12, 'imgG':'imagens/001.jpg', 'imgP':'imagens/001.jpg', 'itensDescricao':['a oferta vlida para os estados de SP, RO e PR', 'aceitamos cartoes de credito', 'Todo dia um bom dia para se comprar'] } var oferta2 = { 'titulo':'Oferta 2', 'descSimples':'Titulo oferta 2 algo deve ser descrito nesta parte da oferta.. lol<br />descriion heres', 'linkComprar':'#comprar2', 'linkOferta':'#linkOferta2', 'valorDe':100.58, 'valorPor':95.63, 'imgG':'imagens/002.jpg', 'imgP':'imagens/002.jpg', 'itensDescricao':['aceitamos cartoes de credito', 'Todo dia um bom dia para se comprar', 'a oferta vlida para os estados de SP, RO e PR'] } var oferta3 = { 'titulo':'Oferta 3', 'descSimples':'Preciso de um titulo<br/>lookkkff', 'linkComprar':'#comprar3', 'linkOferta':'#linkOferta3', 'valorDe':5639.01, 'valorPor':1659.21,
'imgG':'imagens/003.jpg', 'imgP':'imagens/003.jpg', 'itensDescricao':['desc1', 'jjajkl omsdklfm sdf', 'desc 3'] } var oferta4 = { //simula data nula e sem valor de 'titulo':'Oferta 4', 'descSimples':'sdfsadf asdfsdaf adsfasdfasdf', 'linkComprar':'#comprar4', 'linkOferta':'#linkOferta4', 'valorDe':0.00, 'valorPor':17.20, 'imgG':'imagens/004.jpg', 'imgP':'imagens/004.jpg', 'itensDescricao':['desc4'] } var ofertas = [oferta1, oferta2, oferta3, oferta4]; var indices = ''; //pre load for(var i = 0; i < ofertas.length; i++){ new Image().src = ofertas[i].imgG; new Image().src = ofertas[i].imgP; indices += '<a href="javascript:showofe('+i+');"><div class="tmpSlideshowControl"><span>'+(i+1)+'</span></div></a>'; } indices += '<a href="javascript:parar();" id="sliderAParar"><div class="tmpSlideshowControl" style="width=200px;" id="sliderPararContinuar"><span>::</span></div></a>'; document.getElementById('tmpSlideshowControls').innerHTML = indices; </script>
Figura 7 - Dados das Ofertas Se quiser mais ou menos abas, basta adicionar ou remover a estrutura var ofertaN, onde N o ndice da oferta, e a respectiva entrada no vetor var ofertas.
Javascritpt com o setInterval que controla o slider Figura 8. Para aumentar ou diminuir o tempo (em ms) da animao do slider, altere a varivel timeJS.
<script type="text/javascript"> /*author: Autor: Emerson Shigueo Sugimoto*/ var timeJS = new Number(5500); //3500 | 5500 var indice = 0; var intervalo; //Funo setInterval function iniciar(){ clearInterval(intervalo); intervalo = window.setInterval(trocarOfertas, timeJS); document.getElementById('sliderPararContinuar').innerHTML = '<span>::</span>'; document.getElementById('sliderAParar').href = 'javascript:parar();'; } function parar(){ clearInterval(intervalo); document.getElementById('sliderPararContinuar').innerHTML = '<span>></span>'; document.getElementById('sliderAParar').href = 'javascript:continuar();'; } function continuar(){ indice++; iniciar(); } function showofe(index){ parar(); if (index >= ofertas.length){index = 0;} indice = index; trocarOfertas(); iniciar(); } //-----------------------------------------------------function trocarOfertas(){ //parseInt(Math.random()*(ofertas.length)) /*randomico*/ if (indice >= ofertas.length){indice = 0;} var ofe = ofertas[indice++]; var var var var var tit = document.getElementById('sliderTitulo'); img = document.getElementById('sliderImg'); dof = document.getElementById('sliderDadosOferta'); deSlider = document.getElementById('sliderDe'); porSlider = document.getElementById('sliderPor');
tit.innerHTML = ofe.titulo; img.innerHTML = '<a href="'+ofe.linkOferta+'" title="'+ofe.titulo+'" target="_self">'+getImagem(ofe.imgG, ofe.imgP)+'</a>'; dof.innerHTML = ofe.descSimples + '<br />' + getUl(ofe.itensDescricao); deSlider.innerHTML = ''; var de = ofe.valorDe; var tx = ''; if (de == '0,00' || de == '0.00' || de == '0') {tx = '';} else { de = String(de).replace('.', ','); tx = 'De: R$ ' + de;} deSlider.innerHTML = tx; porSlider.innerHTML = 'Por: R$ ' + String(ofe.valorPor).replace('.', ','); } function getImagem(imgG, imgP) {
var escreverIMG = '<img src="imagens/imagem_nao_disponivel.jpg" border="0" />'; if (imgP != '' || imgG != '') { if (imgG != '') { escreverIMG = '<img src="' + imgG + '" border="0" alt="Imagem" />'; //escreverIMG = '<img src="' + imgG + '" border="0" alt="Imagem" style="height:100px; width:100px;" />'; } else if (imgP != '') { escreverIMG = '<img src="' + imgP + '" border="0" alt="Imagem" />'; } } return escreverIMG; } function getUl(vet){ var ul = '<ul>'; for (i = 0; i < vet.length; i++){ul += '<li>'+vet[i]+';</li>';} ul += '</ul>'; return ul; } </script>
Figura 8 - SetInterval
width: 300px; /*175*/ } div.tmpSlideshowControl { border: 1px solid #e1dece; float: left; margin: 0 5px 0 0; width: 28px; /*38*/ height: 24px; /*36*/ color: #554d31; font: 14px Arial, sans-serif; text-align: center; cursor: pointer; } div.tmpSlideshowControl span { line-height: 27px; vertical-align: middle; } div.tmpSlideshowControl:hover { border: 1px solid rgb(161, 155, 137); } </style> <script type="text/javascript"> /*author: Autor: Emerson Shigueo Sugimoto*/ //--Dados das Ofertas ---// var oferta1 = { 'titulo':'Oferta 1', 'descSimples':'Venha se divertir em todas as estações do ano ! Ingresso para 1 dia no Rio Water Planet, por R$ 42,90, ou passaporte válido por 2 anos para 2 ou 4 ou 10 pessoas, por menos de R$ 1 por dia', 'linkComprar':'#comprar1', 'linkOferta':'#linkOferta1', 'valorDe':7.89, 'valorPor':5.12, 'imgG':'imagens/001.jpg', 'imgP':'imagens/001.jpg', 'itensDescricao':['a oferta vlida para os estados de SP, RO e PR', 'aceitamos cartoes de credito', 'Todo dia um bom dia para se comprar'] } var oferta2 = { 'titulo':'Oferta 2', 'descSimples':'Titulo oferta 2 algo deve ser descrito nesta parte da oferta.. lol<br />descriion heres', 'linkComprar':'#comprar2', 'linkOferta':'#linkOferta2', 'valorDe':100.58, 'valorPor':95.63, 'imgG':'imagens/002.jpg', 'imgP':'imagens/002.jpg', 'itensDescricao':['aceitamos cartoes de credito', 'Todo dia um bom dia para se comprar', 'a oferta vlida para os estados de SP, RO e PR'] } var oferta3 = { 'titulo':'Oferta 3', 'descSimples':'Preciso de um titulo<br/>lookkkff', 'linkComprar':'#comprar3', 'linkOferta':'#linkOferta3', 'valorDe':5639.01, 'valorPor':1659.21, 'imgG':'imagens/003.jpg', 'imgP':'imagens/003.jpg', 'itensDescricao':['desc1', 'jjajkl omsdklfm sdf', 'desc 3'] } var oferta4 = { //simula data nula e sem valor de 'titulo':'Oferta 4', 'descSimples':'sdfsadf asdfsdaf adsfasdfasdf', 'linkComprar':'#comprar4', 'linkOferta':'#linkOferta4', 'valorDe':0.00, 'valorPor':17.20, 'imgG':'imagens/004.jpg', 'imgP':'imagens/004.jpg',
10
'itensDescricao':['desc4'] } var ofertas = [oferta1, oferta2, oferta3, oferta4]; var indices = ''; //pre load for(var i = 0; i < ofertas.length; i++){ new Image().src = ofertas[i].imgG; new Image().src = ofertas[i].imgP; indices += '<a href="javascript:showofe('+i+');"><div class="tmpSlideshowControl"><span>'+(i+1)+'</span></div></a>'; } indices += '<a href="javascript:parar();" id="sliderAParar"><div class="tmpSlideshowControl" style="width=200px;" id="sliderPararContinuar"><span>::</span></div></a>'; document.getElementById('tmpSlideshowControls').innerHTML = indices; </script> <script type="text/javascript"> /*author: Autor: Emerson Shigueo Sugimoto*/ var timeJS = new Number(5500); //3500 | 5500 var indice = 0; var intervalo; //Funo setInterval function iniciar(){ clearInterval(intervalo); intervalo = window.setInterval(trocarOfertas, timeJS); document.getElementById('sliderPararContinuar').innerHTML = '<span>::</span>'; document.getElementById('sliderAParar').href = 'javascript:parar();'; } function parar(){ clearInterval(intervalo); document.getElementById('sliderPararContinuar').innerHTML = '<span>></span>'; document.getElementById('sliderAParar').href = 'javascript:continuar();'; } function continuar(){ indice++; iniciar(); } function showofe(index){ parar(); if (index >= ofertas.length){index = 0;} indice = index; trocarOfertas(); iniciar(); } //-----------------------------------------------------function trocarOfertas(){ //parseInt(Math.random()*(ofertas.length)) /*randomico*/ if (indice >= ofertas.length){indice = 0;} var ofe = ofertas[indice++]; var var var var var tit = document.getElementById('sliderTitulo'); img = document.getElementById('sliderImg'); dof = document.getElementById('sliderDadosOferta'); deSlider = document.getElementById('sliderDe'); porSlider = document.getElementById('sliderPor');
tit.innerHTML = ofe.titulo;
11
img.innerHTML = '<a href="'+ofe.linkOferta+'" title="'+ofe.titulo+'" target="_self">'+getImagem(ofe.imgG, ofe.imgP)+'</a>'; dof.innerHTML = ofe.descSimples + '<br />' + getUl(ofe.itensDescricao); deSlider.innerHTML = ''; var de = ofe.valorDe; var tx = ''; if (de == '0,00' || de == '0.00' || de == '0') {tx = '';} else { de = String(de).replace('.', ','); tx = 'De: R$ ' + de;} deSlider.innerHTML = tx; porSlider.innerHTML = 'Por: R$ ' + String(ofe.valorPor).replace('.', ','); } function getImagem(imgG, imgP) { var escreverIMG = '<img src="imagens/imagem_nao_disponivel.jpg" border="0" />'; if (imgP != '' || imgG != '') { if (imgG != '') { escreverIMG = '<img src="' + imgG + '" border="0" alt="Imagem" />'; //escreverIMG = '<img src="' + imgG + '" border="0" alt="Imagem" style="height:100px; width:100px;" />'; } else if (imgP != '') { escreverIMG = '<img src="' + imgP + '" border="0" alt="Imagem" />'; } } return escreverIMG; } function getUl(vet){ var ul = '<ul>'; for (i = 0; i < vet.length; i++){ul += '<li>'+vet[i]+';</li>';} ul += '</ul>'; return ul; } </script> </head> <body> <div class="sliderFrame"> <div id="sliderImg"><a href="#" title="Oferta X" target="_self"><img src="imagens/001.jpg" width="1920" height="1200" border="0" /></a></div> <div class="sliderInfo"> <span id="sliderTitulo">Oferta 1</span> <p id="sliderDadosOferta"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse leo mauris, sollicitudin vel euismod vitae, sollicitudin sit amet ante. Duis ipsum felis, rutrum eu ultrices sit amet, iaculis a sapien. Ut et leo ut quam tempor auctor. Sed sapien quam, consequat ut adipiscing sit amet, faucibus eget libero. </p> <br /> <div style="clear:both;"></div> <div class="sliderDePor"> <div> <span class="clsDe" id="sliderDe">De: R$ 458,26</span><br />
12
<span id="sliderPor">Por: R$ 125,26</span><br /> </div> </div> <div style="clear:both;"></div> </div> <div id="tmpSlideshowControls"></div> <div style="clear:both;"></div> </div> <script type="text/javascript"> document.getElementById('tmpSlideshowControls').innerHTML = indices; //firstcall trocarOfertas(); iniciar(); </script> <div style="clear:both;"></div> </div> </body> </html>
13