overleaf/services/web/frontend/js/pages/marketing/homepage.js
Thomas 1019142457 Use winning website redesign variant (#17200)
* Implement redesign on the default urls and redirect variants to defaults

* Fix Features & Benefits inconsistent case, cleanup temp translation

* Replace header_extras with the website redesign header extras

* Delete old home page

* Remove real time edits javascript (old home page)

* Cleanup unused locales

* Temporarily disable test that checked about/features-overview page

* Fix business/universities links in customer stories

GitOrigin-RevId: 9d2ee64c2622ffea7a2c2f7448a5e5beae3187e9
2024-02-21 09:03:18 +00:00

69 lines
1.7 KiB
JavaScript

import '../../marketing'
function homepageAnimation(homepageAnimationEl) {
function createFrames(word, { buildTime, holdTime, breakTime }) {
const frames = []
let current = ''
// Build up the word
for (const char of word) {
current += char
frames.push({ before: current, time: buildTime })
}
// Hold the complete word
frames.push({ before: current, time: holdTime })
// Break down the word
for (let i = word.length - 1; i > 0; i--) {
current = word.substring(0, i)
frames.push({ before: current, time: breakTime })
}
// Add the final frame with an empty string
frames.push({ before: '', time: breakTime })
return frames
}
const opts = {
buildTime: 100,
holdTime: 1000,
breakTime: 100,
}
const frames = [
// 1.5s pause before starting
{ before: '', time: 1500 },
...createFrames('articles', opts),
...createFrames('theses', opts),
...createFrames('reports', opts),
...createFrames('presentations', opts),
// 5s pause on 'anything' frame
...createFrames('anything', { ...opts, holdTime: 5000 }),
]
let index = 0
function nextFrame() {
const frame = frames[index]
index = (index + 1) % frames.length
homepageAnimationEl.innerHTML = frame.before
setTimeout(nextFrame, frame.time)
}
nextFrame()
}
const homepageAnimationEl = document.querySelector('#home-animation-text')
const reducedMotionReduce = window.matchMedia(
'(prefers-reduced-motion: reduce)'
)
if (homepageAnimationEl) {
if (reducedMotionReduce.matches) {
homepageAnimationEl.innerHTML = 'anything'
} else {
homepageAnimation(homepageAnimationEl)
}
}