File: /sites/nuofama.com/wp-content/themes/blocksy/static/js/frontend/back-to-top-link.js
import ctEvents from 'ct-events'
import { areWeDealingWithSafari } from '../main'
export const mount = (backTop) => {
if (backTop.hasListener) {
return
}
backTop.hasListener = true
// browser window scroll (in pixels) after which the "back to top" link is shown
// browser window scroll (in pixels) after which the "back to top" link opacity is reduced
var scrolling = false
const compute = () => {
var backTop = document.querySelector('.ct-back-to-top')
if (!backTop) return
window.scrollY > 500
? backTop.classList.add('ct-show')
: backTop.classList.remove('ct-show')
}
compute()
ctEvents.on('ct:scroll:render-frame', () => {
compute()
})
backTop.addEventListener('click', (event) => {
event.preventDefault()
var start = window.scrollY
var currentTime = null
const animateScroll = (timestamp) => {
if (!currentTime) currentTime = timestamp
var progress = timestamp - currentTime
const easeInOutQuad = (t, b, c, d) => {
t /= d / 2
if (t < 1) return (c / 2) * t * t + b
t--
return (-c / 2) * (t * (t - 2) - 1) + b
}
var val = Math.max(easeInOutQuad(progress, start, -start, 700), 0)
scrollTo(0, val)
if (progress < 700) {
requestAnimationFrame(animateScroll)
}
}
if (areWeDealingWithSafari) {
requestAnimationFrame(animateScroll)
} else {
scrollTo(0, 0)
}
})
}