Cocktail loader using CSS and minimal jQuery.
A Pen by Marc Malignan on CodePen.
Cocktail loader using CSS and minimal jQuery.
A Pen by Marc Malignan on CodePen.
<div id="loader"> | |
<div id="lemon"></div> | |
<div id="straw"></div> | |
<div id="glass"> | |
<div id="cubes"> | |
<div></div> | |
<div></div> | |
<div></div> | |
</div> | |
<div id="drink"></div> | |
<span id="counter"></span> | |
</div> | |
<div id="coaster"></div> | |
</div> | |
<footer>Please wait while<br>we fill up your glass...</footer> |
var worker = null; | |
var loaded = 0; | |
function increment() { | |
$('#counter').html(loaded+'%'); | |
$('#drink').css('top', (100-loaded*.9)+'%'); | |
if(loaded==25) $('#cubes div:nth-child(1)').fadeIn(100); | |
if(loaded==50) $('#cubes div:nth-child(2)').fadeIn(100); | |
if(loaded==75) $('#cubes div:nth-child(3)').fadeIn(100); | |
if(loaded==100) { | |
$('#lemon').fadeIn(100); | |
$('#straw').fadeIn(300); | |
loaded = 0; | |
stopLoading(); | |
setTimeout(startLoading, 1000); | |
} | |
else loaded++; | |
} | |
function startLoading() { | |
$('#lemon').hide(); | |
$('#straw').hide(); | |
$('#cubes div').hide(); | |
worker = setInterval(increment, 30); | |
} | |
function stopLoading() { | |
clearInterval(worker); | |
} | |
startLoading(); |
* { box-sizing: border-box; } | |
html { height: 100%; } | |
body { | |
position: relative; | |
margin: 0; | |
height: 100%; | |
background: linear-gradient(steelblue, beige); | |
font-family: 'Lato', sans-serif; | |
font-weight: 300; | |
text-align: center; | |
} | |
#loader { | |
position: absolute; | |
top:50%; left:50%; | |
height:200px; width:100px; | |
margin-top:-100px; margin-left:-50px; | |
} | |
#glass { | |
position: relative; | |
height: 100%; | |
background: rgba(255,255,255,.1); | |
border-radius: 0% 0% 15% 15%; | |
border: 3px solid; | |
border-top: 0; | |
border-bottom: 20px solid; | |
border-color: rgba(255,255,255,.7); | |
overflow: hidden; | |
} | |
#drink { | |
position: absolute; | |
top:100%; right:0; bottom:0; left:0; | |
background: linear-gradient(to bottom, orange, orangered); | |
box-shadow: inset 0 2px 1px rgba(255,69,0,.2); | |
opacity: .7; | |
} | |
#counter { | |
position: relative; | |
line-height: 200px; | |
font-size: 22px; | |
color: rgba(255,255,255,1); | |
} | |
#lemon { | |
display: none; | |
position: absolute; | |
top:0; right:0; | |
height:79px; width:79px; | |
margin-top:-38px; margin-right:-38px; | |
background: radial-gradient(#f7f3b6 10%, #d7d26c); | |
border-radius: 50%; | |
border: 4px solid #47582e; | |
box-shadow: inset 0 0 0 2px #f7f3b6; | |
} | |
#straw { | |
display: none; | |
position: absolute; | |
bottom:20px; right:30%; | |
height:220px; width:6px; | |
background: steelblue; | |
border-radius: 0 6px 0 0; | |
transform: rotate(-18.5deg); | |
transform-origin: left bottom; | |
-webkit-transform: rotate(-18.5deg); | |
-webkit-transform-origin: left bottom; | |
} | |
#straw:after { | |
content: ''; | |
position: absolute; | |
top:0; right:0; | |
height:6px; width:80px; | |
background: inherit; | |
border-radius: 0 6px 0 0; | |
} | |
#cubes { | |
position: absolute; | |
top:0; right:0; bottom:0; left:0; | |
} | |
#cubes div { | |
/*display: none;*/ | |
position: absolute; | |
width:50px; height:50px; | |
background: rgba(255,255,255,.3); | |
border-radius: 10px; | |
box-shadow: inset 0 0 10px rgba(255,255,255,.6); | |
} | |
#cubes div:nth-child(1) { | |
bottom:0; | |
} | |
#cubes div:nth-child(2) { | |
bottom:45px; left:25px; | |
transform: rotate(32deg); | |
transform-origin: center bottom; | |
-webkit-transform: rotate(32deg); | |
-webkit-transform-origin: center bottom; | |
} | |
#cubes div:nth-child(3) { | |
bottom:90px; left:20px; | |
transform: rotate(-34deg); | |
transform-origin: center bottom; | |
-webkit-transform: rotate(-34deg); | |
-webkit-transform-origin: center bottom; | |
} | |
#coaster { | |
width: 130%; height: 4px; | |
margin-left: -15%; | |
background: steelblue; | |
border-radius: 2px; | |
} | |
footer { | |
position: absolute; | |
left:0; top:50%; right:0; | |
margin-top: 120px; | |
color: steelblue; | |
} |