useWindowsResize
Este composable gestiona el ajuste dinámico del número de elementos visibles en un carrusel (sliderPerView) basado en el tamaño de la ventana del navegador. Se utilizan diferentes márgenes de padding para dispositivos móviles y de escritorio.
Implementación del Composable:
import { MOBILE_RESOLUTION } from "@/constants/resolutions";
const PADDING_MOBILE = 32;const PADDING_DESKTOP = 256;
export function useWindowsResize() { const sliderPerView = shallowRef(0);
/** * Actualiza el número de slides visibles basados en el tamaño de la ventana. * Ajusta el padding dependiendo de si es una pantalla móvil o de escritorio. */ const updateWindowsResize = () => { let padding = 0; padding = window.innerWidth < MOBILE_RESOLUTION ? PADDING_MOBILE : PADDING_DESKTOP; // Calcula el número de slides visibles basado en el ancho disponible sliderPerView.value = (window.innerWidth - padding) / 4 / 100; };
// Añade el listener de evento 'resize' al montar el componente y lo remueve al desmontarlo onMounted(() => { updateWindowsResize(); window.addEventListener("resize", updateWindowsResize); });
onUnmounted(() => { window.removeEventListener("resize", updateWindowsResize); });
return { sliderPerView };}Descripción de las Funciones:
-
sliderPerView: Es unshallowRefque contiene el número de slides visibles en el carrusel, calculado en base al tamaño de la ventana y al padding aplicado. -
updateWindowsResize:- Calcula el padding según si la resolución de la ventana es móvil o de escritorio.
- Ajusta el valor de
sliderPerViewpara reflejar el número de slides visibles, basándose en el tamaño de la ventana. - Utiliza la fórmula
(window.innerWidth - padding) / 4 / 100para calcular cuántos slides pueden mostrarse al mismo tiempo.
-
onMounted:- Ejecuta
updateWindowsResizeal montar el componente para inicializar el número de slides visibles. - Añade un listener de eventos
resizepara actualizar el número de slides cuando la ventana cambie de tamaño.
- Ejecuta
-
onUnmounted:- Elimina el listener de eventos
resizeal desmontar el componente para evitar fugas de memoria.
- Elimina el listener de eventos
Uso en el Componente Vue
Este componente utiliza useWindowsResize para ajustar dinámicamente el número de elementos visibles en un carrusel de testimonios. El carrusel es gestionado por CarouselBuilder, que toma como parámetro el número de slides visibles (sliderPerView).
Implementación del Setup:
const { sliderPerView } = useWindowsResize();sliderPerView: Controla cuántos slides son visibles en el carrusel dependiendo del tamaño de la ventana.
Template del Componente:
<template> <!-- CarouselBuilder recibe el número de slides visibles dinámicamente desde `sliderPerView` --> <CarouselBuilder :slides-per-view="sliderPerView"> <swiper-slide v-for="{ video, image, id } in testimonies" :key="id"> <TestimonialsCard :alternative-text="image.alternativeText" :url="image.url" @click="toogleModal(video.url)" /> </swiper-slide> </CarouselBuilder></template>Descripción del Template:
-
CarouselBuilder:- El componente
CarouselBuilderrecibe la propslides-per-view, que determina cuántos elementos (slides) son visibles en el carrusel. sliderPerViewse actualiza dinámicamente según el tamaño de la ventana del navegador.
- El componente
-
swiper-slide:- Representa un slide individual en el carrusel.
- Itera sobre los testimonios (
testimonies) y muestra una tarjeta (TestimonialsCard) con una imagen y un video asociado.
-
TestimonialsCard:- Es el componente que muestra la imagen y permite hacer clic para abrir el video asociado en un modal.
Estilos y Ajustes del Carrusel
Es importante mencionar que el valor de sliderPerView determina cuántos slides serán visibles a la vez en el carrusel. Este número se ajusta de manera dinámica dependiendo del tamaño de la ventana, aplicando un padding diferente para móviles y escritorios.
Resumen:
- El composable
useWindowsResizecalcula el número de slides visibles en el carrusel basado en el tamaño de la ventana y ajusta ese valor cuando la ventana cambia de tamaño. - El componente
CarouselBuilderrecibesliderPerViewpara determinar cuántos slides mostrar, lo cual ofrece una experiencia de usuario adaptable tanto en dispositivos móviles como de escritorio. - El componente mantiene una buena gestión de recursos al añadir y eliminar el listener de
resizedurante el ciclo de vida del componente.