Анимация (появление) элементов при прокручивании страницы на чистом JS. Данный плагин разрабатывается собственными силами. danila.korotkov@gmail.com для предложений или замечаний.
Статья в разработке
Описание
В случае, если на экране, в один момент времени, элементов не больше одного, то они будут появляться один за другим (по ходу появления) без задержки. Если элементов больше чем один, то они будут появляться с задержкой (устанавливается в код js, параметр timer).
Если есть необходимость изменить порядок появления, например сделать чтобы два элемента появлялись одновременно, то пользуйтесь параметром - "data-inviewport-id". (см. Дополнительные параметры).
Здесь будет наглядный пример
Код
Код (позже будет добавлен в виде отдельных файлов):
Для работы необходимо добавить к элементу страницы минимальный код:
constinViewport= (entries, observer) => {let i =0;entries.forEach(entry => {let timer =0.3// Стандартное время задержки при появлении нескольких элементов одновременно if (entry.target.getAttribute('data-inviewport-once')) var once = entry.target.getAttribute('data-inviewport-once');
if (entry.target.getAttribute('data-inviewport-timer')) timer = entry.target.getAttribute('data-inviewport-timer');
if (entries.length>1) { // На экране больше чем один элементlet turn; if (entry.target.getAttribute('data-inviewport-id')) turn = entry.target.getAttribute('data-inviewport-id'); // Задан ли номер для выполнения
else { turn = i; i++; } let time = timer *1000* turn;if (once) { // Требуется ли повторениеif (entry.isIntersecting) setTimeout(()=>entry.target.classList.add("is-inViewport"), time); } elsesetTimeout(()=>entry.target.classList.toggle("is-inViewport",entry.isIntersecting), time); }else { // Таймер срабатывания не заданif (once) { // Требуется ли повторениеif (entry.isIntersecting) entry.target.classList.add("is-inViewport"); } elseentry.target.classList.toggle("is-inViewport",entry.isIntersecting); } }); };constObs=newIntersectionObserver(inViewport); const obsOptions = {}; //See: https ://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API#Intersection_observer_options
// Attach observer to every [data-inviewport] element:constELs_inViewport=document.querySelectorAll('[data-inviewport]');ELs_inViewport.forEach(EL => {Obs.observe(EL, obsOptions); });
Требуется ли повторять анимацию каждый раз, когда элемент появляется на странице.
data-inviewport-timer="0.5"
Время задержки в секундах перед началом анимации. Работает задержка при условии, что анимированных элементов на экрана в момент вызова(показа) больше одного.
data-inviewport-id="1"
Номер под которым будет срабатывать анимация (если не указывать, то этот номер будет порядковым). Начинается отчет с элемента с номером - 0!