Определение SVG
Масштабируемая векторная графика - это не что иное, как анимация, в которой все движется и цвета меняются. Единодушная поддержка настольных и мобильных устройств, а также возможность взаимодействия с различными открытыми языками и технологиями делают SVG одним из самых востребованных графических форматов на рынке прямо сейчас.
Другой важной причиной использования SVG является то, что он основан на XML, а размер этих файлов невелик из-за векторной природы SVG, поэтому использование SVG для больших или тяжелых изображений в значительной степени актуально.
Здесь мы собираемся создать SVG-анимацию при прокрутке мыши. Кажется интересным, это действительно так. перейдите по этой ссылке, чтобы узнать, что у нас получилось https://blitz-mobile-apps.github.io/SVG-Scroll-Fill-JavaScript/
Если вы хотите перейти к коду напрямую, вы можете перейти по нашей ссылке на github https://github.com/Blitz-Mobile-Apps/SVG-Scroll-Fill-JavaScript
Однако, если вы хотите узнать о процедуре, вот она.
HTML и CSS
Шаг 1:
Получите SVG с атрибутом пути
Шаг 2:
Оберните SVG в div, скажем svgDiv.
Шаг 3:
Оберните «svgDiv» в другой div, скажем «parentDiv», и задайте ему высоту, чтобы получить вертикальную прокрутку.
Шаг 4:
Установите цвет обводки (например, синий), важно fill = «none»! Ширина обводки (например, 10 пикселей) и идентификатор в SVG, чтобы использовать его позже в JavaScript.
Шаг 5:
Установите для атрибута position в svgDiv значение fixed, а SVG - значение absolute, чтобы они всегда оставались в центре экрана.
JavaScript
Шаг 1:
Получите длину SVG.
// Get the id of the <path> element and the length of <path> var path = document.getElementById("myPath"); var length = path.getTotalLength();
Шаг 2:
Назначьте strokeDashArray и strokeDashOffset для SVG с помощью кода. Самая важная часть, так как она отвечает за заливку штриха в SVG.
// The start position of the drawing path.style.strokeDasharray = length; // Hide the path by offsetting dash. Remove this line to show the path before scroll draw path.style.strokeDashoffset = length;
Шаг 3:
Добавьте прослушиватель событий для прокрутки окна, чтобы мы могли реагировать на прокрутку мыши вниз и находить процент прокрутки, то есть количество выполненной прокрутки вниз
Шаг 4:
Установите SVG strokeDashOffset равным проценту прокрутки, как показано ниже:
strokeDashOffset = pathLength - процент прокрутки
Это гарантирует, что наш SVG заполняется синхронно с прокруткой мыши.
Шаг 5:
Постепенно смещение уменьшается от длины пути до 0, создавая эффект заливки.
// Find scroll percentage on scroll (using cross-browser properties), and offset dash same amount as // percentage scrolled window.addEventListener("scroll", fillOnScroll); function fillOnScroll() { // This long calculation is just needed to find out the percentage of the webpage that has been scrolled. // You don't need to worry about it much. Can be used as is all the time. var scrollpercent = (document.body.scrollTop + document.documentElement.scrollTop) / (document.documentElement.scrollHeight - document.documentElement.clientHeight); // Sets draw to (the progress of scroll multiplied by the length) to find exact offset. var draw = length * scrollpercent; // In downward scroll, simply decreases the strokeDashOffset gradually towards zero. // Reverse the drawing (when scrolling upwards) path.style.strokeDashoffset = length - draw; // Fancy stuff to show fireworks when svg completes stroke filling (strokeDashOffset = 0) if (path.style.strokeDashoffset <= 0) { if (!document.getElementById("fireworks").classList.value.includes("pyro")) { document.getElementById("fireworks").classList.add("pyro") } } else { if (document.getElementById("fireworks").classList.value.includes("pyro")) { document.getElementById("fireworks").classList.remove("pyro") } } //
Надеюсь, эта статья поможет вам научиться заполнять SVG при прокрутке.