Skip to content
(function () {
function iniciar() {
const outer = document.querySelector(".carrusel-portafolio");
const container = outer ? outer.querySelector(".swiper") : null;
if (!container || !container.swiper || !container.swiper.initialized) {
setTimeout(iniciar, 50);
return;
}
const wrapper = container.querySelector(".swiper-wrapper");
// Recolectamos todas las imágenes de fondo de las cards
const imgs = [...wrapper.querySelectorAll(".contenedor-project")]
.map((el) => getComputedStyle(el).backgroundImage)
.filter((bg) => bg && bg !== "none")
.map((bg) => bg.slice(5, -2).replace(/["']/g, ""));
let cargadas = 0;
function marcarListoSiTodoCargo() {
cargadas++;
if (cargadas >= imgs.length) {
outer.classList.add("carrusel-listo"); // recién aquí se habilita el zoom por CSS
empezarMedicion();
}
}
if (imgs.length === 0) {
outer.classList.add("carrusel-listo");
empezarMedicion();
} else {
imgs.forEach((src) => {
const im = new Image();
im.onload = marcarListoSiTodoCargo;
im.onerror = marcarListoSiTodoCargo; // no bloquear si una falla
im.src = src;
});
}
function empezarMedicion() {
let current = null;
function actualizarCentro() {
const outerRect = outer.getBoundingClientRect();
const wrapperRect = wrapper.getBoundingClientRect();
const centroVisible = outerRect.left + outerRect.width / 2;
const slides = wrapper.querySelectorAll(".swiper-slide");
let masCercana = null;
let distanciaMinima = Infinity;
slides.forEach((slide) => {
const centroSlide = wrapperRect.left + slide.offsetLeft + slide.offsetWidth / 2;
const distancia = Math.abs(centroSlide - centroVisible);
if (distancia < distanciaMinima) {
distanciaMinima = distancia;
masCercana = slide;
}
});
if (masCercana !== current) {
if (current) current.classList.remove("is-center");
masCercana.classList.add("is-center");
current = masCercana;
}
requestAnimationFrame(actualizarCentro);
}
requestAnimationFrame(actualizarCentro);
}
}
if (document.readyState === "complete") {
iniciar();
} else {
window.addEventListener("load", iniciar);
setTimeout(iniciar, 200);
}
})();