JSFiddle - React, Tailwind, and code Playground
by silvawebdesigns
HTML
<!-- NOTE: Uses AnimateAnythingJS library for animation styles: https://github.com/matthewmain/AnimateAnythingJS -->
<div id="container">
<div id="b1" class="box">
<svg id="i1" class="icon" viewBox="0 0 100 100">
<path id="top-line-1" d="M30,37 L70,37 Z"></path>
<path id="middle-line-1" d="M30,50 L70,50 Z"></path>
<path id="bottom-line-1" d="M30,63 L70,63 Z"></path>
</svg>
</div>
<div id="b2" class="box">
<svg id="i2" class="icon" viewBox="0 0 100 100">
<path id="top-line-2" d="M30,37 L70,37 Z"></path>
<path id="middle-line-2" d="M30,50 L70,50 Z"></path>
<path id="bottom-line-2" d="M30,63 L70,63 Z"></path>
</svg>
</div>
<div id="b3" class="box">
<svg id="i3" class="icon" viewBox="0 0 100 100">
<path id="top-line-3" d="M30,37 L70,37 Z"></path>
<path id="middle-line-3" d="M30,50 L70,50 Z"></path>
<path id="bottom-line-3" d="M30,63 L70,63 Z"></path>
</svg>
</div>
<div id="b4" class="box">
<svg id="i4" class="icon" viewBox="0 0 100 100">
<polyline id="top-line-4" points="30 37 50 37 70 37"></polyline>
<path id="middle-line-4" d="M30,50 L70,50 Z"></path>
<path id="bottom-line-4" d="M30,63 L70,63 Z"></path>
</svg>
</div>
<div id="b5" class="box">
<svg id="i5" class="icon" viewBox="0 0 100 100">
<path id="top-line-5" d="M30,37 L70,37 Z"></path>
<path id="middle-line-5" d="M30,50 L70,50 Z"></path>
<path id="bottom-line-5" d="M30,63 L70,63 Z"></path>
</svg>
</div>
<div id="b6" class="box">
<svg id="i6" class="icon" viewBox="0 0 100 100">
<path id="top-line-6" d="M30,37 L70,37 Z"></path>
<path id="middle-line-6" d="M30,50 L70,50 Z"></path>
<path id="bottom-line-6" d="M30,63 L70,63 Z"></path>
</svg>
</div>
</div>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/409445/animateAnything.js"></script>
CSS
#container {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.box {
width: 33.3333%;
height: 50%;
float: left;
}
.icon {
position: relative;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 100%;
height: 100%;
fill: none;
stroke-width: 6;
stroke-linecap: round;
stroke-linejoin: round;
cursor: pointer;
}
/********
Peachy
********/
#b1 { background: #fc5c65; }
#b2 { background: #fd9644; }
#b3 { background: #fed330; }
#b4 { background: #eb3b5a; }
#b5 { background: #fa8231; }
#b6 { background: #f7b731; }
.icon { stroke: #FFFFFF; opacity: .95; }
JavaScript
/////////////////////////////////////////////////////
///////////////////// ICON 1 //////////////////////
/////////////////////////////////////////////////////
///Initiation Variables
var icon_1 = document.getElementById("b1");
var topLine_1 = document.getElementById("top-line-1");
var middleLine_1 = document.getElementById("middle-line-1");
var bottomLine_1 = document.getElementById("bottom-line-1");
var state_1 = "menu"; // can be "menu" or "arrow"
var topLineY_1;
var middleLineY_1;
var bottomLineY_1;
var topLeftY_1;
var topRightY_1;
var bottomLeftY_1;
var bottomRightY_1;
var topLeftX_1;
var topRightX_1;
var bottomLeftX_1;
var bottomRightX_1;
///Animation Variables
var segmentDuration_1 = 15;
var menuDisappearDurationInFrames_1 = segmentDuration_1;
var arrowAppearDurationInFrames_1 = segmentDuration_1;
var arrowDisappearDurationInFrames_1 = segmentDuration_1;
var menuAppearDurationInFrames_1 = segmentDuration_1;
var menuDisappearComplete_1 = false;
var arrowAppearComplete_1 = false;
var arrowDisappearComplete_1 = false;
var menuAppearComplete_1 = false;
var currentFrame_1 = 1;
///Menu Disappear
function menuDisappearAnimation_1() {
currentFrame_1++;
if ( currentFrame_1 <= menuDisappearDurationInFrames_1 ) {
window.requestAnimationFrame( ()=> {
//top line
topLineY_1 = AJS.easeInBack( 37, 50, menuDisappearDurationInFrames_1, currentFrame_1 );
topLine_1.setAttribute( "d", "M30,"+topLineY_1+" L70,"+topLineY_1 );
//bottom line
bottomLineY_1 = AJS.easeInBack( 63, 50, menuDisappearDurationInFrames_1, currentFrame_1 );
bottomLine_1.setAttribute( "d", "M30,"+bottomLineY_1+" L70,"+bottomLineY_1 );
//recursion
menuDisappearAnimation_1();
});
} else {
middleLine_1.style.opacity = "0";
currentFrame_1 = 1;
menuDisappearComplete_1 = true;
openMenuAnimation_1();
}
}
///Cross Appear
function arrowAppearAnimation_1() {
currentFrame_1++;
if ( currentFrame_1 <= arrowAppearDurationInFrames_1 ) {
window.requestAnimationFrame( ()=>...