Animations
Title Animation
09 Nov 2022
Цікава анімація, яка відбувається під час появи заголовку в полі зору. Завдяки JavaScript анімується кожна буква заголовку
HTML
SCSS
JS
<h2 class="title">Who we are</h2>
.title {
color: var(--white);
span {
display: inline-block;
opacity: 0;
transform: translateY(4em);
transition: transform 0.2s ease-in-out, opacity 0.6s ease-in-out;
}
&.show {
span {
transform: translateY(0);
opacity: 1;
}
}
}
// Titles animation
const allTitles = [...document.getElementsByClassName(`title`)];
if (allTitles.length > 0) {
// Observer
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add("show")
}
})
}, {threshold: 0.3});
for (let i = 0; i < allTitles.length; i++) {
// Show titles
observer.observe(allTitles[i]);
const wordArr = allTitles[i].textContent.trim().split(" ");
allTitles[i].innerHTML = '';
const spanArr = [];
wordArr.forEach(elem => {
const span = document.createElement("span");
span.innerHTML = `${elem}`;
spanArr.push(span);
})
let accum = 0;
for (let j = 0; j < spanArr.length; j++) {
const spanFather = document.createElement("span");
const letterArr = spanArr[j].innerText.trim().split("");
if (j > 0) accum += spanArr[j - 1].innerText.length;
for (let k = 0; k < letterArr.length; k++) {
const span = document.createElement("span");
span.innerHTML = letterArr[k];
span.style.cssText = `transition-delay: ${(accum + k) * 100}ms`;
spanFather.append(span);
}
const span = document.createElement("span");
span.innerHTML = ' ';
spanFather.append(span);
allTitles[i].append(spanFather);
}
}