Skip to content

Commit 0f16f5a

Browse files
authored
feat: animation — implement using dataset and reference (#299)
feat: `animation` — implement using dataset and reference
2 parents 18f3251 + c7aa1dc commit 0f16f5a

File tree

3 files changed

+15
-6
lines changed

3 files changed

+15
-6
lines changed

src/assets/js/main.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,14 +175,22 @@ const preloadElement = document.querySelector('.preload')
175175
const delayElements = document.querySelectorAll('[data-delay]')
176176

177177
delayElements?.forEach(
178-
(el) => (el.style.transitionDelay = `${parseInt(el.dataset.delay) * 100}ms`)
178+
(el) => {
179+
let delayModifier = 0
180+
const parentElement = el.parentElement
181+
const getAmountOfDelayElems = parentElement.querySelectorAll('[data-delay]').length
182+
if (!parentElement.hasAttribute("data-delay-parent")) parentElement.setAttribute('data-delay-parent', true)
183+
delayModifier = getAmountOfDelayElems
184+
185+
el.setAttribute("data-transition-delay", `${parseInt(el.dataset.delay) * 50 * (delayModifier / 2)}ms`)
186+
}
179187
)
180188

181189
const observer = new IntersectionObserver((entires) =>
182190
entires.forEach((entry) => {
183191
if (entry.isIntersecting)
184-
return entry.target.classList.add('has-been-animated')
185-
return entry.target.classList.remove('has-been-animated')
192+
return entry.target.setAttribute('data-has-been-animated', true)
193+
return entry.target.removeAttribute('data-has-been-animated')
186194
})
187195
)
188196

src/assets/scss/components/_animation.scss

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[data-animation] {
22
opacity: 0;
33
transition: translate var(--_translate, 1s) ease-in-out, scale var(--_scale, 1s) ease-in-out, rotate var(--_rotate, 1s) ease-in-out, opacity var(--_opacity, 1s) ease-in-out;
4+
transition-delay: attr(data-transition-delay, 0ms);
45
}
56

67
[data-animation='fade-in'] {
@@ -31,7 +32,7 @@
3132
}
3233
}
3334

34-
.has-been-animated {
35+
.has-been-animated, [data-has-been-animated] {
3536
opacity: unset;
3637
scale: unset;
3738
rotate: unset;

src/assets/scss/components/_title.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@
3030
}
3131

3232
&:hover {
33-
.note.has-been-animated {
33+
.note:is([data-has-been-animated], .has-been-animated) {
3434
rotate: 0deg;
3535
scale: 1.1;
3636
}
3737
}
3838

39-
.note.has-been-animated {
39+
.note:is([data-has-been-animated], .has-been-animated) {
4040
rotate: 3deg;
4141
--_scale: 300ms;
4242
--_rotate: 700ms;

0 commit comments

Comments
 (0)