Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save DmitriBarannyk/6d38ed8d9d1d15c1e4fa78fe7f03687d to your computer and use it in GitHub Desktop.
Save DmitriBarannyk/6d38ed8d9d1d15c1e4fa78fe7f03687d to your computer and use it in GitHub Desktop.
let animitems = document.querySelectorAll(".animaits");//создаем переменную в которую помещаем массив е элемнтов с //классом "._anim-items", которые в дальней шем подлежат анимированию
if(animitems.length > 0) { //проверяем массив на присутствие в нем элементов, и если
window.addEventListener("scroll", animOnScroll) //он массив не пуст, перебираем его
function animOnScroll(params){
for(let i = 0; i < animitems.length; i++){
let animItem = animitems[i]; //получаем в перменную каждый елемент массива
let animItemHeight = animItem.offsetHeight; //получаем в перемен высоту элемента с учётом вертикал. полей и границ в пикселях
let animateOffset = getCoords(animItem).top; //создаем переменную в которю получ. поцицию элементя верха окна браузера
let animStart = 4; //коефициент момента старта анимации
let animateItemPoint = window.innerHeight - animItemHeight / animStart; ///настройка точки начала момента анимации
if(animItemHeight > window.innerHeight){
animateItemPoint = window.innerHeight - window.innerHeight / animStart; //если высота элемента больше окна браузера
}
//pageYOffset - возвращает количество пикселей на которое прокручен ////документ
if((pageYOffset > animateOffset - animateItemPoint) && pageYOffset < (animateOffset + animItemHeight)){
animItem.classList.add("show");
} else {
animItem.classList.remove("show");
}
}
}
function getCoords(elem) { // crossbrowser version
var box = elem.getBoundingClientRect();
var body = document.body;
var docEl = document.documentElement;
var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;
var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft;
var clientTop = docEl.clientTop || body.clientTop || 0;
var clientLeft = docEl.clientLeft || body.clientLeft || 0;
var top = box.top + scrollTop - clientTop;
var left = box.left + scrollLeft - clientLeft;
return { top: Math.round(top), left: Math.round(left) };
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment