Generate particles using CSS transitions
Initiated by Makis Tracend ( @tracend )
Based on an example by Emanuele Feronato
Generate particles using CSS transitions
Initiated by Makis Tracend ( @tracend )
Based on an example by Emanuele Feronato
<html> | |
<head> | |
<link href="particles.css" type="text/css" rel="stylesheet"> | |
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.0.min.js"></script> | |
<script type="text/javascript" src="particles.js"></script> | |
<script type="text/javascript"> | |
// THE MAIN SCRIPT, TO GENERATE AN EXPLOSION ON MOUSE CLICK | |
$(document).ready(function() { | |
$(document).on('touchstart click', function(e) { | |
var xClick = e.clientX; | |
var yClick = e.clientY; | |
$("body").explosion({ | |
origin:{ | |
x:xClick, | |
y:yClick | |
}, | |
particleClass:"particle" | |
}); | |
}); | |
}); | |
</script> | |
<style> | |
body{ | |
background-color:black | |
} | |
</style> | |
</head> | |
<body> | |
</body> | |
</html> |
.particle { | |
width:8px; | |
height:8px; | |
background-color:red; | |
-webkit-transition: 1s ease; | |
-moz-transition: 1s ease; | |
-o-transition: 1s ease; | |
-ms-transition: 1s ease; | |
transition: 1s ease; | |
} |
(function($){ | |
$.fn.explosion = function(options){ | |
var settings = $.extend({ | |
particleClass: "particle", | |
origin: {x:0,y:0}, | |
particles: 50, | |
radius: 100, | |
complete: function() {} | |
},options); | |
return this.each(function() { | |
for(i=0;i<settings.particles;i++){ | |
var particle = $("<div />").addClass(settings.particleClass); | |
$(particle).css("position","absolute"); | |
// add a particle | |
$(this).append($(particle)); | |
// offset from center | |
$(particle).offset({ | |
top:settings.origin.y-$(particle).height()/2, | |
left:settings.origin.x-$(particle).width()/2 | |
}); | |
// css animation | |
var pos = { | |
x: (Math.floor(Math.random()*settings.radius)-settings.radius/2), | |
y: (Math.floor(Math.random()*settings.radius)-settings.radius/2), | |
z: (Math.floor(Math.random()*settings.radius)-settings.radius/2) | |
}; | |
var duration = (Math.floor(Math.random()*1000)+1000)/1000; | |
$(particle).css( | |
{ | |
'-webkit-transition-duration': duration +"s", | |
'-o-transition-duration': duration +"s", | |
'-ms-transition-duration': duration +"s", | |
'-moz-transition-duration': duration +"s", | |
'transition-duration': duration +"s", | |
'-webkit-transform': "translate3d("+ pos.x +"px,"+ pos.y +"px,"+ pos.z +"px)", | |
'-o-transform': "translate3d("+ pos.x +"px,"+ pos.y +"px,"+ pos.z +"px)", | |
'-ms-transform': "translate3d("+ pos.x +"px,"+ pos.y +"px,"+ pos.z +"px)", | |
'-moz-transform': "translate3d("+ pos.x +"px,"+ pos.y +"px,"+ pos.z +"px)", | |
'transform': "translate3d("+ pos.x +"px,"+ pos.y +"px,"+ pos.z +"px)", | |
'opacity': 0 | |
} | |
); | |
$(particle).on('transitionend webkitTransitionEnd oTransitionEnd', function () { | |
$(this).remove(); | |
}); | |
} | |
settings.complete.call(this); | |
}); | |
}; | |
}(jQuery)); |