Narcolaboratorios en México: la contaminación química que envenena la tierra y el agua
2026-01-27 - 06:34
// Usamos 'load' en vez de 'DOMContentLoaded' para esperar a imágenes y CSS window.addEventListener('load', function() { const idDelVideo = 'video_introD'; const elementoVideo = document.getElementById(idDelVideo); if (elementoVideo) { // Pequeño retraso de 0.5 segundos para dar estabilidad visual setTimeout(() => { elementoVideo.scrollIntoView({ behavior: 'smooth', block: 'center', // Centra verticalmente inline: 'nearest' // Mantiene horizontalidad }); console.log("Scroll automático ejecutado hacia: " + idDelVideo); }, 500); } else { console.warn("No se encontró el elemento con ID: " + idDelVideo); } }); document.addEventListener("DOMContentLoaded", function() { // 1. Seleccionamos el video basado en el ID que pusimos en Elementor // Elementor envuelve el video, así que buscamos la etiqueta 'video' dentro del ID var videoElement = document.querySelector('#video_introD video'); if (videoElement) { // 2. Configuramos el "Observador" var observer = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { // Si el video entra en pantalla (es intersectado) if (entry.isIntersecting) { videoElement.play(); } else { // Opcional: Pausar si el usuario sigue bajando y deja de verlo videoElement.pause(); } }); }, { threshold: 0.5 // El video se reproducirá cuando el 50% sea visible }); // 3. Iniciamos la vigilancia sobre el video observer.observe(videoElement); } }); document.addEventListener("DOMContentLoaded", function() { // 1. Seleccionamos el video basado en el ID que pusimos en Elementor // Elementor envuelve el video, así que buscamos la etiqueta 'video' dentro del ID var videoElement = document.querySelector('#video_introM video'); if (videoElement) { // 2. Configuramos el "Observador" var observer = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { // Si el video entra en pantalla (es intersectado) if (entry.isIntersecting) { videoElement.play(); } else { // Opcional: Pausar si el usuario sigue bajando y deja de verlo videoElement.pause(); } }); }, { threshold: 0.5 // El video se reproducirá cuando el 50% sea visible }); // 3. Iniciamos la vigilancia sobre el video observer.observe(videoElement); } }); #contenedor-hojas-elegante { position: absolute; top: 0; left: 0; width: 100%; pointer-events: none; z-index: 999; overflow: hidden; } .hoja-viento { position: absolute; display: block; background-size: contain; background-repeat: no-repeat; z-index: 999; will-change: top, left, transform; } @keyframes balanceoSuave { 0% { transform: rotate(0deg) translateX(0px); } /* Aumenta 25px a 50px o más para más movimiento lateral */ 33% { transform: rotate(10deg) translateX(25px); } /* Aumenta -15px a -40px, por ejemplo */ 66% { transform: rotate(-5deg) translateX(-15px); } 100% { transform: rotate(0deg) translateX(0px); } } (function() { /* --- CONFIGURACIÓN AJUSTADA --- */ const CONF = { imagenUrl: 'https://cdnpublicidad.milenio.com/piano/infoprueba/NARCOLABOR_files/hojas_0000_Capa-2.png', // ZONA SEGURA (El Video): // Altura en píxeles donde NO deben salir hojas (la altura de tu video aprox) alturaCabezal: 700, maxHojasEnSuelo: 10, // Límite bajo para no saturar velocidadCaida: 100, // Pixeles por segundo tamanoMin: 70, tamanoMax: 110, // TIEMPO Y AZAR tiempoBase: 20000, // 20 segundos base tiempoAzar: 80000 // + 0 a 8 segundos extra aleatorios }; const contenedorID = 'contenedor-hojas-elegante'; let contenedor = document.getElementById(contenedorID); // Mover al body if (contenedor && document.body) { document.body.appendChild(contenedor); contenedor.style.height = document.body.scrollHeight + 'px'; } window.addEventListener('resize', () => { contenedor.style.height = document.body.scrollHeight + 'px'; }); const hojasEnSuelo = []; // Función de Bucle con Tiempo Variable function cicloGenerador() { // Calculamos el próximo tiempo: 20s + (número aleatorio entre 0 y 8s) // Resultado: Las hojas saldrán cada 20 a 28 segundos aprox. const proximoTiempo = CONF.tiempoBase + (Math.random() * CONF.tiempoAzar); setTimeout(() => { intentarCrearHoja(); cicloGenerador(); // Volver a programar el siguiente }, proximoTiempo); } function intentarCrearHoja() { if (document.hidden) return; // --- DETECTOR DE VIDEO --- // Obtenemos cuánto ha bajado el usuario (scroll) const scrollActual = window.scrollY || window.pageYOffset; // SI el usuario está todavía arriba (viendo el video), NO creamos la hoja if (scrollActual < CONF.alturaCabezal) { // Opcional: console.log("Usuario viendo video, hoja cancelada"); return; } // Si pasamos el chequeo, creamos la hoja: const alturaTotal = document.body.scrollHeight; contenedor.style.height = alturaTotal + 'px'; const hoja = document.createElement('div'); hoja.classList.add('hoja-viento'); hoja.style.backgroundImage = `url('${CONF.imagenUrl}')`; const size = Math.random() * (CONF.tamanoMax - CONF.tamanoMin) + CONF.tamanoMin; const startLeft = Math.random() * 95; // Nace justo arriba de la visión actual const startTop = scrollActual - 150; hoja.style.width = `${size}px`; hoja.style.height = `${size}px`; hoja.style.left = `${startLeft}%`; hoja.style.top = `${startTop}px`; hoja.style.opacity = '0'; const metaTop = alturaTotal - size - 20; const distancia = metaTop - startTop; if (distancia < 0) return; const durationSeconds = distancia / CONF.velocidadCaida; hoja.style.animation = `balanceoSuave ${Math.random() * 4 + 3}s ease-in-out infinite alternate`; hoja.style.transition = `top ${durationSeconds}s linear, opacity 2s, transform 0.5s ease-out`; contenedor.appendChild(hoja); void hoja.offsetWidth; requestAnimationFrame(() => { hoja.style.opacity = '1'; hoja.style.top = `${metaTop}px`; }); hoja.addEventListener('transitionend', (e) => { if (e.propertyName === 'top') { manejarAterrizaje(hoja); } }); } function manejarAterrizaje(hoja) { hoja.style.transition = 'none'; hojasEnSuelo.push(hoja); if (hojasEnSuelo.length > CONF.maxHojasEnSuelo) { const vieja = hojasEnSuelo.shift(); vieja.style.transition = 'opacity 2s'; vieja.style.opacity = '0'; setTimeout(() => vieja.remove(), 2000); } } // INTERACCIÓN MOUSE (Susto) let mouseX = 0, mouseY = 0, tick = true; document.addEventListener('mousemove', (e) => { mouseX = e.pageX; mouseY = e.pageY; if (!tick) { requestAnimationFrame(() => { verificarDistancia(); tick = false; }); tick = true; } }); function verificarDistancia() { const hojas = document.querySelectorAll('.hoja-viento'); hojas.forEach(hoja => { if (hoja.style.transition === 'none') return; const rect = hoja.getBoundingClientRect(); const scrollX = window.scrollX || window.pageXOffset; const scrollY = window.scrollY || window.pageYOffset; const hojaCentroX = rect.left + scrollX + rect.width / 2; const hojaCentroY = rect.top + scrollY + rect.height / 2; const dist = Math.hypot(hojaCentroX - mouseX, hojaCentroY - mouseY); if (dist < 180) { const fuerza = (180 - dist) / 180; const empuje = fuerza * 80; const dirX = (hojaCentroX - mouseX) > 0 ? 1 : -1; hoja.style.transform = `translate(${dirX * empuje}px, -20px) rotate(${dirX * 20}deg)`; } else { hoja.style.transform = ''; } }); } // INICIAMOS EL CICLO cicloGenerador(); })(); Los laboratorios clandestinos del narcotráficopara la fabricación de drogas sintéticas envenenan el subsuelo mexicano, generando en los últimos 23 años un ecocidio lento y silencioso que ha quedado impune CRÉDITOS Fuente: DEFENSA, INEGI, UNODC, WATER RESEARCH INSTITUTE | Información y fotos: AMÍLCAR SALAZAR MÉNDEZ | Coordinación:CÉSAR MARTÍNEZ y ABRAHAM FLORES |Programación:JUAN NAVA | Infografía:ARTURO BLACK FONSECA DERECHOS RESERVADOS© MILENIO DIARIO 2026 En un ejercicio periodístico inédito, MILENIO recabó, trasladó y analizó muestras de tierra de dos narcolaboratorios de metanfetamina en Sinaloa y Durango, y obtuvo pruebas científicas de un delito ambiental poco documentado. /* Importación de Source Serif Pro con pesos específico para jerarquía */ @import url('https://fonts.googleapis.com/css2?family=Source+Serif+Pro:wght@400;600&display=swap'); #aviso-interaccion-video { /* Reset y Posicionamiento */ position: fixed; bottom: -150px; /* Escondido inicialmente */ left: 50%; transform: translateX(-50%); z-index: 999999; /* Estética Visual */ width: 90%; max-width: 600px; background-color: #1a1a1a; /* Negro editorial profundo */ color: #ffffff; padding: 24px 32px; border-radius: 16px; box-shadow: 0 15px 35px rgba(0,0,0,0.5); border: 1px solid rgba(255,255,255,0.1); /* Tipografía Source Serif Pro */ font-family: 'Source Serif Pro', serif; /* Layout */ display: flex; align-items: center; justify-content: space-between; gap: 24px; /* Animación suave */ opacity: 0; transition: all 0.8s cubic-bezier(0.19, 1, 0.22, 1); } /* Clase activa que dispara