En una publicación anterior, le mostré cómo crear una galería de imágenes personalizada con slick.js. Hoy abarcaré el proceso de creación de un control deslizante de carrusel de pantalla completa, animado con owl.js (o "Owl Carrusel").
Como de costumbre, para tener una idea inicial de lo que estaremos construyendo, eche un vistazo a la demostración de CodePen relacionada (consulte la versión más grande para una mejor experiencia):
Owl.js es un popular complemento de jQuery creado por David Deutch que te permite construir carruseles atractivos y sensibles. Para comprender mejor lo que este complemento puede ofrecerle, consulte las demostraciones..
Afortunadamente, tiene un gran soporte para el navegador, ya que se ha probado en los siguientes dispositivos:
Para más detalles mira la documentación..
Para comenzar con Owl, comience descargando e instalando los siguientes archivos en su proyecto:
owl.carousel.css
o su versión minificadaowl.carousel.js
o su versión minificadaOpcionalmente, es posible que desee importar el owl.theme.default.css
expediente.
Puede obtener una copia de los archivos de buhos correspondientes visitando su repositorio Github, usando un administrador de paquetes (por ejemplo, npm), o cargando los recursos necesarios a través de un CDN (por ejemplo, cdnjs). Para este tutorial, elegiré la última opción..
Para los fines de este tutorial, más allá de los archivos de búhos, también he incorporado Babel y Bootstrap 4.
Con eso en mente, si miras debajo de la Ajustes pestaña de nuestra pluma de demostración, verás que he incluido tres archivos CSS externos y dos archivos JavaScript externos.
Para empezar, definimos un carrusel que tiene tres diapositivas. Cada una de esas diapositivas contiene un título, un subtítulo y un botón de llamada a la acción.
Aquí está la estructura requerida para nuestra página de demostración:
Vale la pena mencionar dos cosas en este punto:
Con el HTML en su lugar, veamos los estilos CSS que aplicaremos a nuestra página. Para simplificar, solo discutiremos una parte de los estilos disponibles.
Primero, definimos dos propiedades personalizadas y dos clases auxiliares:
: raíz --main-white-color: white; --main-black-color: negro; .static posición: estática; .cover background-size: cover; posición de fondo: centro; repetición de fondo: no repetición;
A continuación, especificamos estilos para las diapositivas del carrusel, incluidas las transiciones:
.owl-carrusel .owl-slide posición: relativo; altura: 100vh; color de fondo: lightgray; .owl-carrusel .owl-slide-animated transform: translateX (20px); opacidad: 0; visibilidad: oculta; transición: todos los 0.05s; .owl-carousel .owl-slide-animated.is-transitioned transform: none; opacidad: 1; visibilidad: visible; transición: todos los 0.5s; .owl-carrusel .owl-slide-title.is -itorizado transición-retardo: 0.2s; .owl-carousel .owl-slide-subtitle.is-transitioned transition-delay: 0.35s; .owl-carrusel .owl-slide-cta.is -itorizado transición-retardo: 0.5s;
Finalmente, establecemos algunas reglas para los métodos de navegación:
.owl-carrusel .owl-dots, .owl-carrusel .owl-nav position: absolute; .owl-carrusel .owl-dots .owl-dot span background: transparente; borde: 1px sólido var (- main-black-color); transición: toda la facilidad de 0.2s; .owl-carousel .owl-dots .owl-dot: hover span, .owl-carrusel .owl-dots .owl-dot.active span background: var (- main-black-color); .owl-carrusel .owl-nav izquierda: 50%; superior: 10%; transformar: traducirX (-50%); margen: 0;
Nota: Las diapositivas deben cubrir la altura completa de la ventana y por lo tanto les damos altura: 100vh
. Sin embargo, como esta unidad es inconsistente en algunos dispositivos (por ejemplo, dispositivos iOS), otra opción es configurar la altura de las diapositivas a través de JavaScript (consulte el panel de JavaScript de la demostración para obtener más información).
En este punto estamos listos para dirigir nuestra atención a JavaScript..
Como primer paso, inicializaremos el carrusel. Por defecto, el complemento proporciona "puntos de navegación", pero nuestro carrusel también incluirá flechas de navegación.
Opciones de navegación del búhoHabilitamos la opción de navegación a través del nav
propiedad de configuración. Además, definimos algunos SVG personalizados como flechas gracias a la navText
propiedad de configuración.
El código que dispara el carrusel se muestra a continuación:
const $ owlCarousel = $ (". owl-carousel"). owlCarousel (items: 1, loop: true, nav: true, navText: ['','']);
Como siguiente paso animamos los contenidos de cada diapositiva. Este comportamiento se maneja a través de la cambiado
evento que proporciona el búho.
Aquí está el código asociado:
$ owlCarousel.on ("changed.owl.carousel", e => $ (". owl-slide-animated"). removeClass ("is-transitioned"); const $ currentOwlItem = $ (". owl-item" ) .eq (e.item.index); $ currentOwlItem.find (". owl-slide-animated"). addClass ("is-transitioned"););
Así que cada vez que visitamos una nueva diapositiva, en primer lugar desaparecen los contenidos de todas las diapositivas. Luego, los contenidos de la diapositiva actual aparecen con una buena animación de diapositivas..
Nota: en vez de cambiado
evento podríamos haber utilizado igualmente el traducido
evento.
Hasta ahora, hemos visto cómo se activan las animaciones a medida que avanzamos por las diapositivas. Pero también queremos ese tipo de animación cuando el carrusel se carga inicialmente. Para implementar esta funcionalidad, usaremos el inicializado
evento.
Aquí está el código relacionado con este evento:
/ * debe vincular el evento inicializado antes de la inicialización del búho (ver demostración) * / $ (". owl-carrusel"). en ("initialized.owl.carousel", () => setTimeout (() => $ (".owl-item.active .owl-slide-animated"). addClass ("está en transición");, 200););
Dentro de ese evento agregamos el está en transición
Clase a los elementos de la primera diapositiva..
Es importante tener en cuenta que este evento debe adjuntarse antes de la inicialización del carrusel..
Antes de seguir adelante, vamos a cubrir una cosa difícil. Si miras la página de demostración, verás que hay un sección
Elemento definido debajo del carrusel. Por defecto, hasta que se carga el carrusel, aparecen los contenidos de la sección y ocurre un pequeño salto en nuestra página..
Hay dos formas de solucionar este comportamiento no deseado. Primero, podemos agregar un precargador (ya lo hicimos en el tutorial relacionado con Slick). Una segunda opción que implementaremos aquí es ocultar el sección
y mostrarlo tan pronto como el carrusel esté inicializado..
En términos de código, la regla CSS necesaria es esta:
sección pantalla: ninguna;
Y el código JavaScript:
$ (". owl-carrusel"). on ("initialized.owl.carousel", () => setTimeout (() => // otro código aquí $ ("section"). show ();, 200););
Lo último que tenemos que hacer es posicionar los puntos de navegación. Por defecto, está absolutamente posicionado. Las siguientes cosas deberían suceder:
.buho-texto de diapositiva
elemento de la diapositiva de destino. La función que se ejecuta y establece la posición deseada para nuestros puntos es la setOwlDotsPosition
.
Aquí está esa función:
función setOwlDotsPosition () const $ target = $ (". owl-item.active .owl-slide-text"); doDotsCalculations ($ target);
Esto aísla la .buho-texto de diapositiva
elemento de la diapositiva activa y lo pasa como un argumento a la doDotsCalculations
sub función.
Aquí está esa subfunción:
function doDotsCalculations (el) const height = el.height (); const arriba, izquierda = el.position (); const res = altura + top + 20; $ (". owl-carrusel .owl-dots"). css (top: '$ res px', izquierda: '$ left px');
Dentro de esta función establecemos la adecuada. parte superior
y izquierda
valores de la .puntos de búho
Elemento basado en la altura y posición del elemento objetivo..
Yendo un paso más allá, la posición de los puntos debe actualizarse a medida que redimensionamos la ventana del navegador. Para lograrlo, aprovechamos la redimensionar
evento búho.
Aquí está el código necesario:
$ owlCarousel.on ("resize.owl.carousel", () => setTimeout (() => setOwlDotsPosition ();, 50););
Por último, pero no menos importante, a medida que navegamos a través de las diapositivas, los puntos deben reposicionarse en función de la altura y la posición del contenido de la diapositiva activa. Gracias a cambiado
evento de nuevo, somos capaces de resolver ese nuevo requisito.
Aquí está el código relacionado:
$ owlCarousel.on ("changed.owl.carousel", e => // otro código aquí const $ currentOwlItem = $ (". owl-item"). eq (e.item.index); const $ target = $ currentOwlItem.find (". owl-slide-text"); doDotsCalculations ($ target););
Antes de cerrar, vamos a discutir un error común de búho. Si eliminamos la sección que se encuentra debajo del carrusel, la barra de desplazamiento vertical desaparece yaparece una parte de la diapositiva adyacente.
Para solucionar esto, activamos la refrescar
evento después de la inicialización del carrusel, como este: $ owlCarousel.trigger ("refresh.owl.carousel");
La demostración debería funcionar bien en todos los navegadores recientes y puede usarla de forma segura en sus proyectos. Aquí hay un recordatorio de lo que hemos construido:
En este tutorial completo, logramos construir un control deslizante de carrusel animado de pantalla completa con owl.js. Es de esperar que haya adquirido nuevas habilidades que podrá poner en práctica en sus próximos proyectos. Como siempre, si tiene alguna pregunta, hágamelo saber en los comentarios a continuación.