My attempt at animating NBC's peacock showing-off.
If you're interested in NBC's past, check out the history of NBC's logo and chime.
<!DOCTYPE html> | |
<meta charset="utf-8"> | |
<style> | |
html, body { | |
height: 100%; | |
margin: 0; | |
} | |
.container { | |
position: relative; | |
box-sizing: border-box; | |
height: 100%; | |
padding: 15px; | |
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | |
} | |
.controls { | |
position: absolute; | |
top: 15px; | |
left: 15px; | |
} | |
#peacock { | |
width: 100%; | |
height: 100%; | |
} | |
.feather { | |
/* stroke-width: 1px; */ | |
/* stroke: #fff; */ | |
/* paint-order: stroke; */ | |
transform-origin: 50% 50%; | |
animation-duration: 1s; | |
animation-fill-mode: forwards; | |
animation-timing-function: ease-in-out; | |
} | |
.showoff .feather { | |
animation-name: showoff; | |
} | |
.infinite-showoff .feather { | |
animation-name: infinite-showoff; | |
animation-iteration-count: infinite; | |
} | |
@keyframes showoff { | |
100% { | |
transform: translate(0px, 0px) rotate(0deg); | |
} | |
} | |
@keyframes infinite-showoff { | |
50% { | |
transform: translate(0px, 0px) rotate(0deg); | |
} | |
} | |
#feather1 { | |
transform: translate(13px, 6px) rotate(45deg); | |
} | |
#feather2 { | |
transform: translate(8px, 2px) rotate(20deg); | |
} | |
#feather3 { | |
transform: translate(3px, 2px) rotate(12deg); | |
} | |
#feather4 { | |
transform: translate(-3px, 2px) rotate(-12deg); | |
} | |
#feather5 { | |
transform: translate(-8px, 2px) rotate(-20deg); | |
} | |
#feather6 { | |
transform: translate(-13px, 6px) rotate(-45deg); | |
} | |
</style> | |
<body> | |
<div class="container"> | |
<form class="controls js-controls"> | |
<label><button type="button" value="once">Once</button></label> | |
<label><button type="button" value="infinite">Infinite</button></label> | |
</form> | |
<svg id="peacock" class="showoff" viewBox="0 0 64 64"> | |
<path id="feather1" class="feather" style="fill: #fcb711" d="M7.93 49.75h20.95L11.6 37.7c-4-2.56-8.48-1.06-10.1 3.19-1.37 4.87 2.06 8.87 6.42 8.87" /> | |
<path id="feather2" class="feather" style="fill: #f37021" d="M8.43 24.32a6.69 6.69 0 001.12 10.63l18.4 12.61-8.92-20.43c-1.87-4.82-6.98-5.87-10.6-2.81" /> | |
<path id="feather3" class="feather" style="fill: #cc004c" d="M24.26 14.38a6.55 6.55 0 00-5.48 9.06L28 45.2l3.25-22.88c.75-5.68-3.56-8.3-6.99-7.93" /> | |
<path id="feather6" class="feather" style="fill: #0db14b" d="M56.12 49.75H35.17L52.45 37.7c4-2.56 8.48-1.06 10.1 3.19 1.37 4.87-2.05 8.87-6.42 8.87" /> | |
<path id="feather5" class="feather" style="fill: #0089d0" d="M55.62 24.32a6.69 6.69 0 01-1.12 10.63L36.11 47.55l8.92-20.43c1.87-4.82 6.98-5.87 10.6-2.81" /> | |
<path id="feather4" class="feather" style="fill: #6460aa" d="M39.8 14.38c3 .06 7.47 3.62 5.47 9.06L36.05 45.2l-3.24-22.88c-.75-5.68 3.55-8.3 6.98-7.93" /> | |
<path id="body" style="fill: #ffffff" d="m 34.43,21.44 c 0,0 0.93,0 1,0.44 -0.69,0.56 -2.56,0.63 -2.31,3.63 l 2.67,19.63 c 0,0 0.417,2.327 -0.33,3 -1.67,1.5 -5,1.41 -6.72,0 -0.77,-0.62 -0.77,-1.49 -0.617,-2.9 C 28.915,38.4 30.68,28.46 30.8,26.29 31.145,24.38 30.86,21.875 32.68,21.44" /> | |
</svg> | |
</div> | |
<script type="text/javascript"> | |
"use strict"; | |
var peacock = document.querySelector("#peacock"); | |
function animate(event) { | |
var button = event.target; | |
if (button.value === "infinite") { | |
peacock.classList.add("infinite-showoff"); | |
} else { | |
peacock.classList.remove("infinite-showoff", "showoff"); | |
setTimeout(() => peacock.classList.add("showoff"), 10); | |
} | |
} | |
document.querySelector(".js-controls").addEventListener("click", animate); | |
</script> | |
</body> |