CSSPlugin + BezierPlugin fun powered by:
http://www.greensock.com/gsap-js/
BezierPlugin Docs: http://api.greensock.com/js/com/greensock/plugins/BezierPlugin.html
CSSPlugin + BezierPlugin fun powered by:
http://www.greensock.com/gsap-js/
BezierPlugin Docs: http://api.greensock.com/js/com/greensock/plugins/BezierPlugin.html
<div id="container"></div> | |
<div id="slider"></div> | |
/* | |
GSAP JS Demo | |
http://www.greensock.com/gsap-js/ | |
Animation and Bezier motion: | |
http://cdnjs.cloudflare.com/ajax/libs/gsap/latest/TweenMax.min.js | |
*/ | |
var container = $("#container"), | |
tl; | |
function getAnimation(num) { | |
var element = $('<div class="creature"/>'); | |
element.append("<div>" + num + "</div>") | |
container.append(element); | |
//bezier magic provided by GSAP BezierPlugin (included with TweenMax) | |
//http://api.greensock.com/js/com/greensock/plugins/BezierPlugin.html | |
//create a semi-random tween | |
var bezTween = new TimelineLite(); | |
bezTween.to(element, 6, { | |
bezier:{ | |
type:"soft", | |
values:[{x:150, y:300}, {x:300, y:30}, {x:500 + Math.random() *100, y:320*Math.random() + 50}, {x:650, y:320*Math.random() + 50}, {x:900, y:100}, {x:1100, y:500}], | |
autoRotate:true | |
}, | |
ease:Linear.easeNone}); | |
bezTween.to(element, 0.3, {scale:0.6, repeat:(bezTween.duration() / 0.3) -1, yoyo:true}, 0) | |
bezTween.to(element.find('div'), 2, {rotation:360, repeat:2, ease:Linear.easeNone}, 0) | |
return bezTween; | |
} | |
//create a bunch of Bezier tweens and add them to a timeline | |
function buildTimeline() { | |
tl = new TimelineMax({repeat:6, onUpdate:updateSlider, delay:1}); | |
for (i = 0 ; i< 20; i++){ | |
//start creature animation every 0.17 seconds | |
tl.add(getAnimation(i), i * 0.17); | |
} | |
} | |
// --- jQueryUI Controls --- // | |
$("#slider").slider({ | |
range: false, | |
min: 0, | |
max: 1, | |
step:0.001, | |
slide: function ( event, ui ) { | |
tl.pause(); | |
//adjust the timeline's progress() based on slider value | |
tl.progress( ui.value); | |
} | |
}); | |
function updateSlider() { | |
$("#slider").slider("value", tl.progress()); | |
} | |
$("#slider, .ui-slider-handle").mousedown(function() { | |
$('html, #slider, .ui-slider-handle').one("mouseup", function(e){ | |
tl.resume(); | |
}); | |
}); | |
buildTimeline(); |
body{ | |
background-color:#333; | |
margin:0; | |
color:white; | |
} | |
#container{ | |
background-color:black; | |
width:1000px; | |
height:400px; | |
overflow:hidden; | |
position:relative; | |
} | |
#logo{ | |
position:absolute; | |
left:805px; | |
top:335px; | |
z-index:1; | |
} | |
.creature{ | |
background:url(http://www.greensock.com/_img/codepen/bezierCreature/creature_red.png); | |
width:27px; | |
height:29px; | |
left:-30px; | |
top:-30px; | |
position:absolute; | |
} | |
.creature div { | |
position:relative; | |
top:-60px; | |
font-size:30px; | |
width:50px; | |
height:50px; | |
border-radius:50%; | |
background:#2d2d2d; | |
text-align:center; | |
line-height:50px; | |
} | |
#slider{ | |
posistion:relative; | |
width:950px; | |
top:20px; | |
left:25px; | |
} | |
.ui-slider .ui-slider-handle { | |
width: 40px !important; | |
margin-left: -20px !important; | |
height:40px !important; | |
margin-top:-10px !important; | |
} |