"use strict"; function buildSlider(ref) { const skillblock = ref; let seen = false; return function(entry) { if (seen || !entry[0]?.isIntersecting) { return; } seen = true; const doNotAnimate = window.matchMedia("(prefers-reduced-motion: reduce)"); let counter = 0; const interval = doNotAnimate ? (doNotAnimate.matches ? 0 : 75) : 0; for (var skill of skillblock.getElementsByClassName("skill-percentage")) { counter += 1; const self = skill; setTimeout(() => { self.style.width = `${self.getAttribute("data-width")}%`; }, counter * interval); } }; } var initHandlers = function() { const skillblocks = document.getElementsByClassName("skill-block"); for (const skillblock of Array.from(skillblocks)) { const observer = new IntersectionObserver(buildSlider(skillblock), { threshold: 0.1 }); observer.observe(skillblock); } }; window.addEventListener("load", initHandlers);