I really liked what they did with the text over at http://panda.network/ so I thought I'd have a crack at making my own implementation here.
A Pen by Rachel Smith on CodePen.
<div class="text"> | |
<p>Nachos are</p> | |
<p> | |
<span class="word wisteria">tasty.</span> | |
<span class="word belize">wonderful.</span> | |
<span class="word pomegranate">fancy.</span> | |
<span class="word green">beautiful.</span> | |
<span class="word midnight">cheap.</span> | |
</p> | |
</div> |
I really liked what they did with the text over at http://panda.network/ so I thought I'd have a crack at making my own implementation here.
A Pen by Rachel Smith on CodePen.
var words = document.getElementsByClassName('word'); | |
var wordArray = []; | |
var currentWord = 0; | |
words[currentWord].style.opacity = 1; | |
for (var i = 0; i < words.length; i++) { | |
splitLetters(words[i]); | |
} | |
function changeWord() { | |
var cw = wordArray[currentWord]; | |
var nw = currentWord == words.length-1 ? wordArray[0] : wordArray[currentWord+1]; | |
for (var i = 0; i < cw.length; i++) { | |
animateLetterOut(cw, i); | |
} | |
for (var i = 0; i < nw.length; i++) { | |
nw[i].className = 'letter behind'; | |
nw[0].parentElement.style.opacity = 1; | |
animateLetterIn(nw, i); | |
} | |
currentWord = (currentWord == wordArray.length-1) ? 0 : currentWord+1; | |
} | |
function animateLetterOut(cw, i) { | |
setTimeout(function() { | |
cw[i].className = 'letter out'; | |
}, i*80); | |
} | |
function animateLetterIn(nw, i) { | |
setTimeout(function() { | |
nw[i].className = 'letter in'; | |
}, 340+(i*80)); | |
} | |
function splitLetters(word) { | |
var content = word.innerHTML; | |
word.innerHTML = ''; | |
var letters = []; | |
for (var i = 0; i < content.length; i++) { | |
var letter = document.createElement('span'); | |
letter.className = 'letter'; | |
letter.innerHTML = content.charAt(i); | |
word.appendChild(letter); | |
letters.push(letter); | |
} | |
wordArray.push(letters); | |
} | |
changeWord(); | |
setInterval(changeWord, 4000); | |
@import url(https://fonts.googleapis.com/css?family=Open+Sans:600); | |
body { | |
font-family: 'Open Sans', sans-serif; | |
font-weight: 600; | |
font-size: 40px; | |
} | |
.text { | |
position: absolute; | |
width: 450px; | |
left: 50%; | |
margin-left: -225px; | |
height: 40px; | |
top: 50%; | |
margin-top: -20px; | |
} | |
p { | |
display: inline-block; | |
vertical-align: top; | |
margin: 0; | |
} | |
.word { | |
position: absolute; | |
width: 220px; | |
opacity: 0; | |
} | |
.letter { | |
display: inline-block; | |
position: relative; | |
float: left; | |
transform: translateZ(25px); | |
transform-origin: 50% 50% 25px; | |
} | |
.letter.out { | |
transform: rotateX(90deg); | |
transition: transform 0.32s cubic-bezier(0.55, 0.055, 0.675, 0.19); | |
} | |
.letter.behind { | |
transform: rotateX(-90deg); | |
} | |
.letter.in { | |
transform: rotateX(0deg); | |
transition: transform 0.38s cubic-bezier(0.175, 0.885, 0.32, 1.275); | |
} | |
.wisteria { | |
color: #8e44ad; | |
} | |
.belize { | |
color: #2980b9; | |
} | |
.pomegranate { | |
color: #c0392b; | |
} | |
.green { | |
color: #16a085; | |
} | |
.midnight { | |
color: #2c3e50; | |
} |