UNPKG

italia2024

Version:

Italia 2024 assets

58 lines (50 loc) 1.8 kB
//response-lazy.js const BREAKPOINTS = [0, 432, 744, 768, 960, 1200].sort((a, b) => a - b); document.addEventListener("DOMContentLoaded", function () { const lazyElements = [].slice.call(document.querySelectorAll("img.lazy, iframe.lazy, embed.lazy, object.lazy, video.lazy")); if ("IntersectionObserver" in window) { const observer = new IntersectionObserver(function (entries) { entries.forEach(function (entry) { if (entry.isIntersecting) { const element = entry.target; const src = getSourceForBreakpoint(element); if (src) { if (element.tagName === "VIDEO") { updateVideoSources(element, src); element.load(); } else { element.src = src; } element.classList.remove("lazy"); observer.unobserve(element); } else { console.warn(`No source found for element:`, element); } } }); }, { rootMargin: "0px", threshold: 0.1 }); lazyElements.forEach(element => observer.observe(element)); } }); function getSourceForBreakpoint(element) { const windowWidth = window.innerWidth; let attribute = element.tagName === "SOURCE" ? "srcset" : "src"; for (let i = BREAKPOINTS.length - 1; i >= 0; i--) { if (windowWidth > BREAKPOINTS[i]) { attribute = `${attribute}${BREAKPOINTS[i]}`; break; } } return element.dataset[attribute] || element.getAttribute(attribute); } function updateVideoSources(videoElement, src) { let source = videoElement.querySelector("source"); if (!source) { source = document.createElement("source"); videoElement.appendChild(source); } source.src = src; }