mirror of
https://github.com/ianramzy/decentralized-video-chat.git
synced 2024-11-15 14:49:21 +08:00
63 lines
1.9 KiB
JavaScript
63 lines
1.9 KiB
JavaScript
|
;(function () {
|
||
|
'use strict'
|
||
|
const revealEl = document.querySelectorAll('[class*=reveal-]')
|
||
|
let viewportHeight = window.innerHeight
|
||
|
|
||
|
function throttle (delay, fn) {
|
||
|
var lastCall = 0
|
||
|
return function () {
|
||
|
var now = new Date().getTime()
|
||
|
if (now - lastCall < delay) {
|
||
|
return
|
||
|
}
|
||
|
lastCall = now
|
||
|
return fn.apply(void 0, arguments)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function elementIsVisible (el, offset) {
|
||
|
return (el.getBoundingClientRect().top <= viewportHeight - offset)
|
||
|
}
|
||
|
|
||
|
function revealElements () {
|
||
|
for (let i = 0; i < revealEl.length; i++) {
|
||
|
let el = revealEl[i]
|
||
|
let revealDelay = el.getAttribute('data-reveal-delay')
|
||
|
let revealOffset = (el.getAttribute('data-reveal-offset') ? el.getAttribute('data-reveal-offset') : '200')
|
||
|
let listenedEl = (el.getAttribute('data-reveal-container') ? el.closest(el.getAttribute('data-reveal-container')) : el)
|
||
|
if (elementIsVisible(listenedEl, revealOffset) && !el.classList.contains('is-revealed')) {
|
||
|
if (revealDelay && revealDelay !== 0) {
|
||
|
setTimeout(function () {
|
||
|
el.classList.add('is-revealed')
|
||
|
}, revealDelay)
|
||
|
} else {
|
||
|
el.classList.add('is-revealed')
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
revealDone()
|
||
|
}
|
||
|
|
||
|
function revealScroll () {
|
||
|
throttle(30, revealElements())
|
||
|
}
|
||
|
|
||
|
function revealResize () {
|
||
|
viewportHeight = window.innerHeight
|
||
|
throttle(30, revealElements())
|
||
|
}
|
||
|
|
||
|
function revealDone () {
|
||
|
if (revealEl.length > document.querySelectorAll('[class*=reveal-].is-revealed').length) return
|
||
|
window.removeEventListener('load', revealElements)
|
||
|
window.removeEventListener('scroll', revealScroll)
|
||
|
window.removeEventListener('resize', revealResize)
|
||
|
}
|
||
|
|
||
|
if (revealEl.length > 0 && document.body.classList.contains('has-animations')) {
|
||
|
window.addEventListener('load', revealElements)
|
||
|
window.addEventListener('scroll', revealScroll)
|
||
|
window.addEventListener('resize', revealResize)
|
||
|
}
|
||
|
}())
|