Code from this lesson
Javascript
<!-- Subtitle Cycle from Will-Myers.com -->
<script>
(function() {
const options = [
"Sed hendrerit.",
"Vivamus laoreet.",
"In ut quam vitae odio lacinia tincidunt.",
"Etiam feugiat lorem non metus.",
"Duis leo."
];
//Build Subtitle Element
const siteTitle = document.querySelector('.header-display-desktop #site-title') || document.querySelector('.header-display-desktop .header-title-logo');
const mobileSiteTitle = document.querySelector('.header-display-mobile #site-title') || document.querySelector('.header-display-mobile .header-title-logo');
const subtitle = document.createElement('div');
subtitle.classList.add('cycle-subtitle');
const mobileSubtitle = subtitle.cloneNode(true);
siteTitle.append(subtitle);
mobileSiteTitle.append(mobileSubtitle);
// Get Random subtitle each time page loads, great for touch devices
const getRandom = () => Math.floor(Math.random() * (options.length - 1));
let index = getRandom(); // Initialize with the first option
let canChangeSubtitle = true;
const setNewSubTitle = () => {
if (canChangeSubtitle) {
if (index > options.length - 1) { index = 0 }
let newSubtitle = options[index];
subtitle.innerHTML = '<span>' + options[index] + '</span>';
mobileSubtitle.innerHTML = '<span>' + options[index] + '</span>';
index += 1;
canChangeSubtitle = false;
setTimeout(() => {
canChangeSubtitle = true;
}, 500);
}
}
siteTitle.addEventListener('mouseenter', setNewSubTitle);
mobileSiteTitle.addEventListener('mouseenter', setNewSubTitle);
setNewSubTitle();
}());
</script>
Custom CSS
.cycle-subtitle {
font-size: 14px;
}
.cycle-subtitle span {
display: block;
animation: subtitleAnimateIn 0.3s ease forwards;
}
@keyframes subtitleAnimateIn {
from {
opacity: 0;
transform: translateX(20px);
}
to {
transform: translateX(0px);
opacity: 1;
}
}