Last active
February 22, 2022 15:44
-
-
Save davidoort/9da54e48819732c8e63d0ca41aa622d4 to your computer and use it in GitHub Desktop.
Web Typing Animation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<style> | |
html, | |
body { | |
font-family: 'Poppins', sans-serif; | |
padding: 0em 0em; | |
font-size: 16px; | |
background: #222; | |
color: #000; | |
background-color: transparent; | |
} | |
h1, | |
h2 { | |
font-weight: 200; | |
margin: 0.4em 0; | |
} | |
h1 { | |
font-size: 3.5em; | |
} | |
h2 { | |
color: #888; | |
font-size: 2em; | |
} | |
</style> | |
<script type="text/javascript"> | |
// HTML CSS JSResult Skip Results Iframe | |
// EDIT ON | |
var TxtRotate = function (el, toRotate, period) { | |
this.toRotate = toRotate; | |
this.el = el; | |
this.loopNum = 0; | |
this.period = parseInt(period, 2) || 100; | |
this.txt = ''; | |
this.tick(); | |
this.isDeleting = false; | |
}; | |
TxtRotate.prototype.tick = function () { | |
var i = this.loopNum % this.toRotate.length; | |
var fullTxt = this.toRotate[i]; | |
if (this.isDeleting) { | |
this.txt = fullTxt.substring(0, this.txt.length - 1); | |
} else { | |
this.txt = fullTxt.substring(0, this.txt.length + 1); | |
} | |
this.el.innerHTML = '<span class="wrap">' + this.txt + '</span>'; | |
var that = this; | |
var delta = 300 - Math.random() * 100; | |
if (this.isDeleting) { delta /= 2; } | |
if (!this.isDeleting && this.txt === fullTxt) { | |
delta = this.period; | |
this.isDeleting = true; | |
} else if (this.isDeleting && this.txt === '') { | |
this.isDeleting = false; | |
this.loopNum++; | |
delta = 500; | |
} | |
setTimeout(function () { | |
that.tick(); | |
}, delta); | |
}; | |
window.onload = function () { | |
var elements = document.getElementsByClassName('txt-rotate'); | |
for (var i = 0; i < elements.length; i++) { | |
var toRotate = elements[i].getAttribute('data-rotate'); | |
var period = elements[i].getAttribute('data-period'); | |
if (toRotate) { | |
new TxtRotate(elements[i], JSON.parse(toRotate), period); | |
} | |
} | |
// INJECT CSS | |
var css = document.createElement("style"); | |
css.type = "text/css"; | |
css.innerHTML = ".txt-rotate > .wrap { border-right: 0.08em solid #666 }"; | |
document.body.appendChild(css); | |
}; | |
</script> | |
<link href='https://fonts.googleapis.com/css?family=Poppins' rel='stylesheet'> | |
<h1>I'm a<span class="txt-rotate" data-period="500" | |
data-rotate='[ " student.", " roboticist.", " photographer.", " nerd.", " singer.", "n aerospace engineer.", " music producer.", " Youtuber.","n app developer.", " filmmaker." ]'></span> | |
</h1> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This produces the result seen in the home page of dalonso.me (my personal website)