Unlimited Wordpress themes, plugins, graphics & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Web Design
  2. Parallax Scrolling

Crea un sitio web con desplazamiento único con Locomotive Scroll y Tailwind CSS

by
Read Time:12 minsLanguages:

Spanish (Español) translation by Carlos (you can also view the original English article)

¿Alguna vez has querido crear un sitio web de una sola página con un desplazamiento único pero no sabías por dónde empezar? Si es así, ¡no te preocupes! Hoy vamos a crearlo juntos. Para lograr esto, aprovecharemos Locomotive Scroll, una biblioteca de JavaScript para crear efectos de desplazamiento geniales, es pequeña y fácil de usar.

Además, para acelerar el proceso de desarrollo (y crear un diseño responsivo con un esfuerzo mínimo) haremos uso de Tailwind CSS.

Lo que vamos a crear

Como siempre, antes de continuar, examinemos el resultado final (desplázate o, mejor aún, mira la demostración en una pantalla grande y revisa los efectos):

¿Qué es Locomotive Scroll?

Locomotive Scroll es una de las muchas bibliotecas de desplazamiento de JavaScript que existen actualmente. Quizá ya hayas utilizado algunas otras en tus proyectos, como ScrollTrigger.js y ScrollMagic.js. De hecho, traté un ejemplo con ScrollMagic en un tutorial anterior.

Esta es la definición que aparece en el sitio de Locomotive Scroll:

«Una biblioteca de desplazamiento simple que usan los desarrolladores en Locomotive. Creada como una capa sobre virtual-scroll de ayamflow, brinda un desplazamiento suave con soporte para efectos de paralaje, alternancia de clases y activación de event listeners cuando los elementos están en la ventana gráfica».

¿Tienes curiosidad por explorar las capacidades de esta biblioteca? ¡Comencemos!

Empezar con Locomotive Scroll

Para empezar con Locomotive Scroll, tienes que incluir los siguientes archivos en tu proyecto:

  • El archivo locomotive-scroll.css o su versión minimizada
  • El archivo locomotive-scroll.js o su versión minimizada

Puedes descargarlos visitando su repositorio en GitHub, usando un administrador de paquetes (por ejemplo, npm) o cargando los recursos necesarios mediante un CDN (por ejemplo, jsDelivr). Para este tutorial, elegiremos la última opción.

Como se mencionó en la introducción, para esta demostración, además de los archivos de Locomotive, también incorporaremos Tailwind CSS para crear el diseño de la página.

Teniendo eso presente, si miras en la pestaña Settings (Configuraciones) de nuestro pen de demostración, verás que hay dos archivos CSS externos y un archivo JavaScript externo.

The required CSS filesThe required CSS filesThe required CSS files
The required JavaScript fileThe required JavaScript fileThe required JavaScript file

1. Estructurar la página

Locomotive Scroll viene con varios atributos data distintos para manipular los elementos. Utilizaremos muchos de ellos, por lo que al final de este tutorial tendrás un buen conocimiento de lo que hacen y cómo puedes usarlos.

Empecemos especificando un elemento contenedor con el atributo data-scroll-container. Dentro de él, colocaremos las secciones de la página y un enlace para regresar a la parte superior. Más tarde, inicializaremos el plugin dirigiéndonos a este contenedor.

Todas las secciones de la página tendrán el atributo data-scroll-section. Además, casi todos tendrán un atributo id. Este atributo nos ayudará a navegar con suavidad a las diferentes secciones mediante el menú y el enlace de regreso a la parte superior.

Esta es la estructura de la página inicial:

En este punto, estamos listos para examinar más detalladamente las secciones importantes de la página.

Sección #1

La primera sección incluirá un encabezado y un párrafo.

The layout of the first sectionThe layout of the first sectionThe layout of the first section

Otra cosa importante aquí: de manera predeterminada, el enlace de regreso a la parte superior no aparecerá. A medida que nos desplacemos:

  • Si el encabezado está a la vista, el enlace será/permanecerá invisible.
  • Aparecerá únicamente cuando el encabezado no esté a la vista.
The back-to-top link

Para implementar esta funcionalidad, pasaremos los atributos data-scroll, data-scroll-repeat y data-scroll-call="toggleBackToTop" al encabezado. Ahora examinemos un poco más la función de estos atributos:

El trabajo del atributo data-scroll es comprobar si el elemento está a la vista. Tan pronto como aparezca por primera vez, el plugin le añadirá la clase is-inview. Esta clase ya no se eliminará. Observa también cómo el plugin modifica la propiedad transform de CSS del elemento para aplicar los diferentes efectos.

The is-inview class added by Locomotive ScrollThe is-inview class added by Locomotive ScrollThe is-inview class added by Locomotive Scroll

El trabajo del atributo data-scroll-repeat es comprobar repetidamente si el elemento está a la vista. El plugin alternará la clase is-inview dependiendo de la posición del elemento. En nuestro caso, utilizaremos este atributo únicamente en combinación con el atributo data-scroll-call que lo necesita para funcionar correctamente.

El trabajo del atributo data-scroll-call es activar el evento call de Locomotive. El valor del atributo, que puede ser cualquier cosa que queramos, se pasa como un parámetro al callback del evento y nos permite hacer cosas cuando el elemento objetivo entra o sale de la ventana gráfica. Es un poco difícil explicarlo con palabras, por lo que es mejor que veas el código JavaScript. Trabajaremos con él de nuevo en las próximas secciones. Como se dijo, recuerda que lo utiizaremos junto con el atributo data-scroll-repeat.

Así es como estructuramos esta sección:

Sección #22

La segunda sección incluirá los enlaces del menú..

The layout of the second sectionThe layout of the second sectionThe layout of the second section

Para navegar con suavidad a las secciones de la página al hacer clic en un enlace, tenemos que proporcionar el atributo data-scroll-to a los enlaces..

Nota: Pasaremos el mismo atributo al enlace de regreso a la parte superior..

Ten presente que este atributo no forma parte de los documentos al momento de redactar este artículo. Si te preguntas cómo sé sobre su existencia, la respuesta es que lo encontré al revisar el código fuente de la página de GitHub del plugin..

The required data-scroll-to attribute for smooth scrolling The required data-scroll-to attribute for smooth scrolling The required data-scroll-to attribute for smooth scrolling

Como alternativa, si no quieres usar este atributo, puedes lograr esta funcionalidad utilizando algunos métodos de desplazamiento de JavaScript..

Así es como estructuramos esta sección::

Sección #33

La tercera sección incluirá un encabezado y algo de texto..

The layout of the third sectionThe layout of the third sectionThe layout of the third section

A medida que nos desplacemos, fijaremos el título en la parte superior. ¿Pero por cuánto tiempo? Bueno, hasta desplazarnos más allá de su parent. En ese punto, el elemento desaparecerá, ya que será parte del flujo normal del documento..

Para implementar esta funcionalidad, asignaremos los atributos data-scroll, data-scroll-stickydata-scroll-target="#about" al encabezado. Algunas notas::

  • Como ya sabemos, el atributo data-scroll detectará si nuestro elemento está a la vista..
  • El atributo data-scroll-sticky lo hará «pegajoso» junto con el atributo data-scroll-target..
  • El valor del atributo data-scroll-target determinará las posiciones pegajosas inicial y final del elemento..
The sticky durationThe sticky durationThe sticky duration
Aplicaremos la misma técnica en la sexta sección (Clients), por lo que omitiremos esa..

Así es como estructuramos esta sección::

Sección #44

La cuarta sección incluirá dos imágenes de Unsplash..

The layout of the fourth sectionThe layout of the fourth sectionThe layout of the fourth section

A medida que nos desplacemos, se producirá un efecto de paralaje. Para ser más específicos, la primera imagen se moverá cuatro veces más rápido que la segunda..

Para implementar esta funcionalidad, pasaremos los atributos data-scroll y data-scroll-speed a las imágenes. El valor del segundo atributo determinará su velocidad de desplazamiento. Aquí le asignaremos data-scroll-speed="4.8" a la primera imagen y data-scroll-speed="1.2" a la segunda..

Así es como estructuramos esta sección::

Sección #55

La quinta sección contendrá un encabezado y dos banners de texto explicando nuestros servicios..

The layout of the fifth sectionThe layout of the fifth sectionThe layout of the fifth section

A medida que nos desplazamos, se producirán varios efectos de paralaje::

  • Primero, las letras del encabezado se moverán a diferentes velocidades. Además, cada vez que aparezcan, recibirán un color aleatorio de una lista de colores predefinidos..
  • En segundo lugar, los banners se moverán de forma horizontal en diferentes direcciones..

Para implementar esta funcionalidad, haremos lo siguiente::

Asignaremos los atributos data-scoll, data-scroll-repeat, data-scroll-speeddata-scroll-call="randomizeTextColor" a las letras del encabezado. Como queremos un efecto de paralaje, el valor del atributo data-scroll-speed variará para cada letra. Recuerda la función del atributo data-scroll-call. Aquí estamos diciendo: cuando las letras ingresen a la ventana gráfica y se active el evento call de Locomotive, haz algo. Si revisas la sección de JavaScript, notarás que en este punto se activa la función getRandomColor(). De manera opcional, aquí también podemos poner en acción el atributo data-scroll-delay..

También asignaremos los atributos data-scroll, data-scroll-direction="horizontal", data-scroll-speeddata-scroll-target="#services" a los banners. El atributo data-scroll-direction="horizontal" moverá los elementos de forma horizontal durante el desplazamiento. Luego, al dar valores opuestos a los atributos data-scroll-speed, nos aseguramos de que se moverán en diferentes direcciones (de izquierda a derecha o de derecha a izquierda). Por último, el atributo data-scroll-target="#services" determinará cuándo deben empezar las animaciones horizontales. Para entenderlo, trata de poner la id de otra sección, por ejemplo data-scroll-target="#office" y recarga la página. Observa que las animaciones empiezan mucho antes de lo que deberían..

Así es como estructuramos esta sección::

Sección #77

La séptima sección incluirá un encabezado de llamada a la acción..

The layout of the seventh sectionThe layout of the seventh sectionThe layout of the seventh section

A medida que nos desplacemos, ocurrirán dos cosas::

  • En primer lugar, cada vez que se vea el encabezado, recibirá un color aleatorio, como en el ejemplo anterior..
  • En segundo lugar, animaremos cada letra creando otro efecto de paralaje (lerp)..

Para implementar esta funcionalidad, haremos lo siguiente::

Asignaremos los atributos data-scoll, data-scroll-repeatdata-scroll-call="randomizeTextColor" al encabezado. Recuerda que ya conocemos el atributo data-scroll-call="randomizeTextColor". Está bien utilizarlo aquí también..

Y asignaremos los atributos data-scroll, data-scroll-delaydata-scroll-speed="5" a cada letra. Todas las letras se moverán cinco veces más rápido que el desplazamiento normal, pero con distintos retrasos. Por ejemplo, la primera letra tendrá data-scroll-delay="0.15"  mientras que la segunda tendrá data-scroll-delay="0.095". Esto creará el efecto lerp/staggering. Nuevamente, puedes ver los efectos lerp en el ejemplo del plugin..

Así es como estructuramos esta sección::

2. Inicialización del pluginn

Hemos hablado de muchas de las funciones del plugin, pero no lo hemos inicializado. Hagámoslo ahora..

Aquí está todo el código JavaScript que se requiere::

Algunas notas rápidas::

  • Mantendremos su comportamiento fluido en todos los dispositivos..
  • Observa los parámetros de callback del evento call. El primero (es decir, value) contiene los valores de los atributos data-scroll-call. Al usar una condición if, verificamos qué valores están activos en cada ocasión, luego si los elementos asociados entran o salen de la ventana gráfica y, por último, realizamos las acciones deseadas..

Conclusiónn

¡Felicidades, amigos! Logramos crear un sitio web con desplazamiento de paralaje gracias a Locomotive Scroll. Esperemos que este ejercicio haya mostrado el poder de esta pequeña biblioteca y que los haya motivado a crear efectos de desplazamiento avanzados con facilidad..

Este es un recordatorio de lo que hemos creado::

¡No te olvides de darle un poco de amor ❤️!

Antes de concluir, permíteme dejarte algunas reflexiones: :

  • Al igual que con todas las tecnologías/herramientas/ bibliotecas, la mejor forma de aprender Locomotive Scroll es a través de sus documentos. Revisa el ejemplo publicado y utiliza las herramientas de tu navegador para inspeccionar su código fuente. Asimismo, consulta su repositorio en GitHub para ver posibles problemas, lo activo que es el proyecto, cómo utilizan la biblioteca otras personas o simplemente para tomar algunas ideas. Si te sientes más aventurero, revisa el código nativo del plugin. Aquí aprenderá cosas como qué parámetros puede aceptar una función (por ejemplo, el callback del evento call), etc..
  • Los efectos de desplazamiento pueden reducir el rendimiento de un sitio web. Además de este hecho, cuanto más complejos sean los efectos, mayor será el riesgo de que se produzcan problemas en diferentes navegadores/dispositivos. Por ejemplo, en dispositivos móviles yo evitaría utilizar las animaciones horizontales que tratamos..
  • Para efectos aún más avanzados, puedes combinar Locomotive Scroll con otras bibliotecas de animación como GSAP y barba.js..

Por último, pero no por ello menos importante, ¡muchas gracias a los desarrolladores de Locomotive por este plugin! Como siempre, muchas gracias por leer y ¡asegúrate de compartir con nosotros tus proyectos con Locomotive!!

Sigue desplazándoteg

Revisa estos otros tutoriales para aprender más sobre JavaScript y desplazamiento::

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.