Ir al contenido principal

Botones de scroll horizontal con html - css y Javascript

Vamos a programar en este articulo dos botones para hacer scroll horizontal con html, css y unas pocas líneas de JavaScript.


Vas a poder encontrar el código explicado paso a paso y te va a quedar disponible para que lo puedas copiar y probar en tu propio proyecto.


Antes de arrancar te dejo también disponible este tutorial en vídeo.


No olvides suscribirte a mi canal, subo contenido regularmente! ahora si , comenzamos con el código.


1 - Comenzamos creando la maquetación HTML.



<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="styles.css" /> <title>Document</title> </head> <body> <div class="scrolling-buttons-container"> <span id="scrolling-button-left">👈</span> <span id="scrolling-button-right">👉</span> </div> <div class="scrolling-container"> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> <div class="scrolling-card"><h2>Soy una card Feliz</h2></div> </div> <script src="app.js"></script> </body> </html>


A - Primero, dentro de un contenedor tenemos nuestros dos botones, en mi caso son unas etiquetas span que me simulan un botón y que dentro contienen un emoji. En tu caso, podrías utilizar botones o lo que se ajuste a tu proyecto, lo importante es que les pongas un ID para poder identificarlo.


B - Por ultimo, dentro de un segundo contenedor, ponemos todas nuestras cards, cada una de ellas debe compartir una clase css.


2 - Aplicamos los estilos CSS.



.scrolling-container { display: flex; flex-wrap: nowrap; overflow-x: auto; scroll-behavior: smooth; } .scrolling-card { flex: 0 0 auto; border: solid 1px black; margin: 10px; width: 250px; height: 150px; text-align: center; } .scrolling-container::-webkit-scrollbar { display: none; } .scrolling-buttons-container { display: flex; justify-content: space-between; font-size: 25px; margin-left: 25px; margin-right: 25px; }

A - Scrolling-container: Es el primer contenedor en el que se ordena la distribución de todas las cards a las cuales les vamos a dar la posibilidad de desplazarse de izquierda a derecha.


Utilizamos flexbox para lograr mostrar todas las cards en una misma fila. Además, le pasamos un comportamiento de scroll tipo smooth para generar mas suavidad en el desplazamiento de las cards.


B - Scrolling-card: Esta clase corresponde a cada card en particular, a las cuales alineamos con flexbox y les damos un estilo de aspecto y posicionamiento dentro de la web.


C - Scrolling-container::-webkit-scrollbar: En esta parte simplemente le decimos a la clase scrolling-container que queremos que nos elimine la barra de scroll horizontal que se muestra por defecto. Esta barra no se ve agradable en el diseño y la funcionalidad de desplazamiento la tendrán los botones.


D - Scrolling-buttons-container: Esta clase corresponde al contenedor de los botones en donde les damos un tamaño y un posicionamiento en la web.


3 - Funcionalidad de los botones con JavasCript.


const rightBtn = document.querySelector("#scrolling-button-right"); const leftBtn = document.querySelector("#scrolling-button-left"); const content = document.querySelector(".scrolling-container"); rightBtn.addEventListener("click", () => { content.scrollLeft += 800; }); leftBtn.addEventListener("click", () => { content.scrollLeft -= 800; });


A) Primero atrapamos el ID de ambos botones y la clase contenedora de todas las cards guardando esos valores dentro de unas constantes. Una vez hecho esto, ya estamos en condiciones de armar la funcionalidad.


B) Llega el momento de utilizar la propiedad scrollLeft para lograr la funcionalidad de desplazar a la derecha o a la izquierda el contenido. Se que es confuso, pero no hay una propiedad que se llame scrollRight. Simplemente con scrollLeft vamos a poder mover el contenido para ambos lados de las siguiente manera:


Para mover el contenido a la derecha le pasamos el escuchador de eventos al botón indicado y le pedimos que mueva el content (el contenedor de cards) hacia la derecha los pixeles que queramos utilizando scrollLeft con (+=) Es importante resaltar el +.


Para mover el contenido a la izquierda utilizamos exactamente la misma lógica pero esta vez utilizando el scrollLeft con signo (-=) Utilizamos el negativo para desplazar el contenido en sentido opuesto.


Eso es todo lo necesario para lograr el comportamiento de scroll horizontal utilizado botones.


Espero que te sirva y que la pases muy bien!


Saludos,

Pablo.

Comentarios

Entradas populares de este blog

Buscador y filtrado de productos en Javascript

Vamos a crear en este articulo un buscador y filtrado de productos en JavaScript paso a paso. Te voy a ir dejando el código limpio para que puedas copiarlo y probarlo en tu proyecto junto con explicaciones. Te dejo también el video de este tutorial por si te interesa tenerlo a mano. ¡No te olvides de suscribirte a mi canal! ♥️. 1) El HTML del buscador del productos en javaScript <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="styles.css" /> <title>Document</title> </head> <body> <h1>BUSCAR PRODUCTOS</h1> <!-- search content --> <div class="search-container"> <input type="text" id="searchInput" placeholder="Search products..." /> ...

Como deployar proyecto Backend con Node.js y Expess.js en Vercel

Se hace bastante simple deployar un proyecto backend con NodeJS y Express en vercel, solo hay que tener en cuenta algunas pocas cosas! te lo voy a ir mostrando en este articulo paso paso, dejándote también el código de ejemplo para que te lo puedas copiar y probar en tu proyecto. Te dejo también el paso a paso en video, no te olvides de suscribirte a mi canal ❤️ Preparando proyecto para deployar en Vercel Vamos a comenzar creando un proyecto simple para deployar, en tu editor de código crea una carpeta llamada app. Dentro de esta carpeta corre el siguiente comando en la consola: npm init -y Esto va a crear un archivo package.json con información básica y necesaria del proyecto. Ahora, dentro de nuestra carpeta app hay que crear otro archivo al cual lo vamos a llamar index.js, es importantísimo que se llame index.js y no de otra forma como app.js o server.js, vercel va a buscar un archivo que se llame index.js a la hora de deployar el código. Entonces la estructura tiene que ir que...

Append vs AppendChild en Javascript ¿ Cuál utilizar ?

No comprendo por que usas append y no appendChild. Hace poco recibí este comentario en uno de mis videos de YouTube en donde muestro como ir paso a paso creando la lógica de un E-commerce con JavaScript. Aquí el video para quien le interese: En verdad esto me motivo a escribir este articulo para explicar la diferencia entre ambos y comentar cual es conveniente utilizar. ¿Qué son append y appendChild? Append y appendChild en JavaScript son metodos para manipular el DOM (es decir: el Document Objet Model). Ambos tienen la facultad de agregar elementos al DOM pero tienen enfoques ligeramente diferentes. El método appendChid Su tarea principal es agregar un único nodo como hijo al final de otro nodo existente. Para utilizarlo, primero hay que seleccionar el nodo al que deseas agregar un hijo y luego llamar a appendChild. Un ejemplo con appendChild() const parent = document.getElementById("parentElement"); const child = document.createElement("div"); parent.appendChil...