{"id":3388,"date":"2016-06-07T09:00:25","date_gmt":"2016-06-07T12:00:25","guid":{"rendered":"https:\/\/www.mxcursos.com\/blog\/?p=3388"},"modified":"2019-03-26T10:49:28","modified_gmt":"2019-03-26T13:49:28","slug":"criando-um-slideshow-com-javascript-puro","status":"publish","type":"post","link":"https:\/\/www.mxcursos.com\/blog\/criando-um-slideshow-com-javascript-puro\/","title":{"rendered":"Criando um slideshow com Javascript puro"},"content":{"rendered":"<p>\u00c9 bem comum em nossos projetos a grande necessidade em termos slides de imagens e quando pensamos nisso, a primeira coisa que vem cabe\u00e7a \u00e9: Procurar um plugin do jQuery e Javascript.<\/p>\n<p>Muitas\u00a0vezes esses plugins possuem\u00a0muitos recursos, quando na verdade o que voc\u00ea necessita\u00a0\u00e9 de algo simples, com apenas uma transi\u00e7\u00e3o de imagens e com um efeito tipo fade.<\/p>\n<p>Recentemente me solicitaram um exemplo de um slide simples. Pois bem! Nada melhor do que utilizar apenas o <a href=\"https:\/\/www.mxcursos.com\/blog\/tags\/javascript\/\">Javascript<\/a> e um pouco de <a href=\"https:\/\/www.mxcursos.com\/blog\/tags\/css3\/\">CSS<\/a> para demonstrar que \u00e9 poss\u00edvel realizar essa tarefa e mais: Com pouqu\u00edssimos c\u00f3digos.<\/p>\n<p>A ideia aqui n\u00e3o \u00e9 dizer que voc\u00ea n\u00e3o deva utilizar jQuery, mas que voc\u00ea possa conhecer e explorar recursos do Javascript.<\/p>\n<p>Portanto, divirta-se\u00a0descobrindo esses\u00a0recursos incr\u00edveis \ud83d\ude42<\/p>\n<p>Ent\u00e3o vamos l\u00e1.<\/p>\n<p>Primeiro, vou mostrar a estrutura das pastas e arquivos:<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-3389 size-full\" title=\"Slideshow com Javascript - Sublime\" src=\"https:\/\/www.mxcursos.com\/blog\/wp-content\/uploads\/2016\/05\/pasta-slide.jpg\" alt=\"Slideshow com Javascript - Sublime\" width=\"200\" height=\"298\" srcset=\"https:\/\/www.mxcursos.com\/blog\/wp-content\/uploads\/2016\/05\/pasta-slide.jpg 200w, https:\/\/www.mxcursos.com\/blog\/wp-content\/uploads\/2016\/05\/pasta-slide-16x24.jpg 16w\" sizes=\"(max-width: 200px) 100vw, 200px\" \/><\/p>\n<p>Teremos os seguintes arquivos:<\/p>\n<ul>\n<li><strong>index.html<\/strong>, que ter\u00e1 nossa marca\u00e7\u00e3o e que chamar\u00e1 os arquivos css e javascript.<\/li>\n<li><strong>css\/style.css<\/strong>, que\u00a0ir\u00e1 conter nosso\u00a0estilo.<\/li>\n<li><strong>js\/slider.js<\/strong>, que\u00a0criar\u00e1 o efeito de altern\u00e2ncia de imagens.<\/li>\n<\/ul>\n<p>E a pasta images, que ter\u00e3o nossas imagens, claro!<\/p>\n<p>Como dito, no arquivo <em>index.html<\/em> teremos nossa marca\u00e7\u00e3o;\u00a0o\u00a0c\u00f3digo est\u00e1 comentado pra uma melhor compreens\u00e3o.<\/p>\n<h2>Trabalhando o JavaScript<\/h2>\n<pre class=\"lang:xhtml decode:true\">&lt;!DOCTYPE html&gt;\r\n&lt;html lang=\"pt-br\"&gt;\r\n&lt;head&gt;\r\n\t&lt;meta charset=\"UTF-8\"&gt;\r\n\t&lt;title&gt;Slide Show&lt;\/title&gt;\r\n\t&lt;!--Chama o arquivo style.css --&gt;\r\n\t&lt;link rel=\"stylesheet\" href=\"css\/style.css\"&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n\t&lt;!-- Define a lista n\u00e3o ordenada com as imagens --&gt;\r\n\t&lt;ul id=\"sliders\"&gt;\r\n\t\t&lt;!-- \r\n\t\t\tDefine uma classe no primeiro item, \r\n\t\t\tpara garantir que ser\u00e1 mostrado\r\n\t\t\tao acessar a p\u00e1gina\r\n\t\t--&gt;\r\n\t\t&lt;li class=\"slider-active\"&gt;&lt;img src=\"images\/slider-01.jpg\" \/&gt;&lt;\/li&gt;\r\n\t\t&lt;li&gt;&lt;img src=\"images\/slider-02.jpg\" \/&gt;&lt;\/li&gt;\r\n\t\t&lt;li&gt;&lt;img src=\"images\/slider-03.jpg\" \/&gt;&lt;\/li&gt;\r\n\t&lt;\/ul&gt;\r\n\t\r\n\t&lt;!--Chama o arquivo slider.js--&gt;\r\n\t&lt;script src=\"js\/slider.js\"&gt;&lt;\/script&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>Agora iremos para o arquivo <em>style.css<\/em>, que est\u00e1 na pasta <em>css<\/em>. Nele iremos definir\u00a0as dimens\u00f5es,\u00a0ocultar os itens, e posicionar o slide atual.<\/p>\n<p>O c\u00f3digo est\u00e1 comentado:<\/p>\n<pre class=\"lang:css decode:true\">\/**Definiremos as configura\u00e7\u00f5es do Container do slide **\/\r\n#sliders{\r\n\t\/*Remove o bullet*\/\r\n\tlist-style: none;  \r\n\t\/* Define que position:relative porque os \r\n\t * elementos filhos usar\u00e3o absolute\r\n\t *\/\r\n\tposition: relative; \r\n\t\/*Define a largura*\/\r\n\twidth: 800px;\r\n\t\/*Define uma altura*\/\r\n\theight:300px;\r\n        \/*Centralizar na horizontal*\/\r\n\tmargin:0 auto;\r\n\t\/*Oculta os elementos que ultrapassarem \r\n\t* as dimens\u00f5es definidas\r\n\t*\/\r\n\toverflow: hidden;\r\n}\r\n\/*Configuremos os itens do slide*\/\r\n#slider li{\r\n\t\/*Definimos como posi\u00e7\u00e3o absoluta, seguindo o elemento pai*\/\r\n\tposition: absolute;\r\n\t\/*Define que ficar\u00e1 encostado no topo*\/\r\n\ttop:0;\r\n\t\/*Define que ficar\u00e1 enconstado do lado esquerdo*\/\r\n\tleft:0;\r\n\t\/*Coloca a opacidade zero, pra ocultar*\/\r\n\topacity: 0;\r\n\t\/*Define ordena\u00e7\u00e3o relacionados os elementos*\/\r\n\tz-index: 0;\r\n\t\/*Cria uma transi\u00e7\u00e3o da opacidade com 1 segundo*\/\r\n\t-webkit-transition: opacity 1s;\r\n\t-moz-transition: opacity 1s;\r\n\ttransition: opacity 1s;\r\n}\r\n\r\n\/* Agora defiremos uma classe \r\n * que mostrar o item atual\r\n *\/\r\n#sliders li.slider-active{\r\n\t\/*Ordena que ficar\u00e1 a frente dos itens*\/\r\n\tz-index: 1;\r\n\t\/*Mostra o slide atual*\/\r\n\topacity: 1;\r\n}<\/pre>\n<p>Agora vamos para o\u00a0arquivo\u00a0<em>slider.js.\u00a0N<\/em>ele iremos adicionar e remover, por intervalo de tempo, a classe\u00a0<em>slider-active\u00a0<\/em>e quando o elemento estiver com essa classe, ele ira exibir\u00a0o item e ocultar os outros.<\/p>\n<p>Vamos ao c\u00f3digo comentado:<\/p>\n<pre class=\"lang:js decode:true\">\/*\r\n\tPega todos os elementos li da lista n\u00e3o ordenada\r\n\tretornando um objeto NodeList, \r\n\tde acordo com posicionamento encontrado\r\n\tno documento\r\n\r\n*\/\r\nvar sliders  = document.querySelectorAll('#sliders li');\r\n\/*\r\n Define o indice, que ser\u00e1 responsavel \r\n por informar os slider atual\r\n *\/\r\nvar current  = 0;\r\n\/*\r\n Retorna o total de itens do slide.\r\n Diminui menos 1, devido o primeiro\r\n item come\u00e7a com zero. \r\n Se temos 2 items, sua posi\u00e7\u00e3o:\r\n 0,1,2\r\n*\/\r\nvar total    = sliders.length - 1;\r\n\/*\r\n  Executaremos uma fun\u00e7\u00e3o num intervalo de tempo.\r\n  E defiremos que executar\u00e1 em 2000 milesegundos\r\n*\/\r\nwindow.setInterval(function(){\r\n\t\/*\r\n\t a variavel index ser\u00e1 respons\u00e1vel pela\r\n\t posi\u00e7\u00e3o do elemento que iremos remover a classe\r\n\t*\/\r\n\tvar index =  current ? current - 1 : total;\r\n\t\/*Pega o elemento pra remover a classe*\/\r\n\tsliders[index].className  = '';\r\n\t\/*Adiciona a classe no elemento atual*\/\r\n\tsliders[current].className  = 'slider-active';\r\n\t\/*Calcular a posi\u00e7\u00e3o do pr\u00f3ximo elemento que ser\u00e1 exibido*\/\r\n\tcurrent = current &gt;= total ? 0 : current+1; \t\r\n}, 2000);<\/pre>\n<p>A l\u00f3gica aplicada\u00a0\u00e9 adicionar uma classe no elemento atual, e remover da anterior que foi exibido. Se\u00a0o elemento a ser exibido for o primeiro, ent\u00e3o ele remove a classe do \u00faltimo elemento e assim\u00a0o ciclo ser\u00e1 recorrente.<\/p>\n<p>Dica: Quer se especializar em desenvolvimento e aprender Javascript, jQuery, HTML5, CSS3 e muito mais? Conhe\u00e7a <a href=\"https:\/\/www.mxcursos.com\/front-end?tracking=blog&amp;utm_source=blog&amp;utm_medium=post_link&amp;utm_content=marketing\" target=\"_blank\" rel=\"noopener noreferrer\">nossos cursos online de Desenvolvimento Front-End<\/a>.<\/p>\n<p>Segue o link com o exemplo do slide funcionando:<\/p>\n<p><a href=\"https:\/\/www.mxcursos.com\/blog\/exemplos\/slideshow\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.mxcursos.com\/blog\/exemplos\/slideshow<\/a><\/p>\n<p>E aqui, voc\u00ea pode baixar os arquivos:<\/p>\n<p><a href=\"https:\/\/www.dropbox.com\/s\/dcf0wq45ipwxdhx\/slide.zip?dl=0\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.dropbox.com\/s\/dcf0wq45ipwxdhx\/slide.zip?dl=0<\/a><\/p>\n<p>Espero que tenham gostado a dica.<\/p>\n<p>Se tiver d\u00favidas, basta deixar um coment\u00e1rio abaixo e claro, compartilhe este post.<\/p>\n<p>Um abra\u00e7o e at\u00e9 mais!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c9 bem comum em nossos projetos a grande necessidade em termos slides de imagens e quando pensamos nisso, a primeira coisa que vem cabe\u00e7a \u00e9: Procurar um plugin do jQuery e Javascript. Muitas\u00a0vezes esses plugins possuem\u00a0muitos recursos, quando na verdade o que voc\u00ea necessita\u00a0\u00e9 de algo simples, com apenas uma transi\u00e7\u00e3o de imagens e com [&hellip;]<\/p>\n","protected":false},"author":67,"featured_media":18839,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[678],"tags":[1233,1269],"class_list":["post-3388","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","tag-javascript","tag-slides"],"_links":{"self":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts\/3388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/users\/67"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/comments?post=3388"}],"version-history":[{"count":0,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/posts\/3388\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/media\/18839"}],"wp:attachment":[{"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/media?parent=3388"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/categories?post=3388"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mxcursos.com\/blog\/wp-json\/wp\/v2\/tags?post=3388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}