分享几种JS烟花

Post by 张美工, 2010-8-4, Views:

蓝色理想发了自己写的烟花效果,弄的心里痒痒,自己也想写一个出来玩,结果把IE写死好几次,还是放弃了,这里转几个别人写的效果上来分享


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>firework - Zehee</title>
<script type="text/javascript">
var fireworks = function(){
 this.size = 20;
 this.rise();
}
fireworks.prototype = {
 color:function(){
  var c = ['0','3','6','9','c','f'];
  var t = [c[Math.floor(Math.random()*100)%6],'0','f'];
  t.sort(function(){return Math.random()>0.5?-1:1;});
  return '#'+t.join('');
 },
 aheight:function(){
  var h = document.documentElement.clientHeight-250;
  return Math.abs(Math.floor(Math.random()*h-200))+201;
 },
 firecracker:function(){
  var b = document.createElement('div');
  var w = document.documentElement.clientWidth;
  b.style.position = 'absolute';
  b.style.color = this.color();
  b.style.bottom = 0;
  b.style.left = Math.floor(Math.random()*w)+1+'px';
  document.body.appendChild(b);
  return b;
 },
 rise:function(){
  var o = this.firecracker();
  var n = this.aheight();
  var c = this.color;
  var e = this.expl;
  var s = this.size;
  var k = n;
  var m = function(){
   o.style.bottom = parseFloat(o.style.bottom)+k*0.1+'px';
   k-=k*0.1;
   if(k<2){
    clearInterval(clear);
    e(o,n,s,c);
   }
  }
  o.innerHTML = '.';
  if(parseInt(o.style.bottom)<n){
   var clear = setInterval(m,20);
  }
 },
 expl:function(o,n,s,c){
  var R=n/3,Ri=n/6,Rii=n/9;
  var r=0,ri=0,rii=0;
  for(var i=0;i<s;i++){
   var span = document.createElement('span');
   var p = document.createElement('i');
   var a = document.createElement('a');
   span.style.position = 'absolute';
   span.style.fontSize = n/10+'px';
   span.style.left = 0;
   span.style.top = 0;
   span.innerHTML = '*';
   p.style.position = 'absolute';
   p.style.left = 0;
   p.style.top = 0;
   p.innerHTML = '*';
   a.style.position = 'absolute';
   a.style.left = 0;
   a.style.top = 0;
   a.innerHTML = '*';
   o.appendChild(span);
   o.appendChild(p);
   o.appendChild(a);
  }
  function spr(){
   r += R*0.1;
   ri+= Ri*0.06;
   rii+= Rii*0.06;
   sp = o.getElementsByTagName('span');
   p = o.getElementsByTagName('i');
   a = o.getElementsByTagName('a');
   for(var i=0; i<sp.length;i++){
    sp[i].style.color = c();
    p[i].style.color = c();
    a[i].style.color = c();
    sp[i].style.left=r*Math.cos(360/s*i)+'px';
    sp[i].style.top=r*Math.sin(360/s*i)+'px';
    sp[i].style.fontSize=parseFloat(sp[i].style.fontSize)*0.96+'px';
    p[i].style.left=ri*Math.cos(360/s*i)+'px';
    p[i].style.top=ri*Math.sin(360/s*i)+'px';
    p[i].style.fontSize=parseFloat(sp[i].style.fontSize)*0.96+'px';
    a[i].style.left=rii*Math.cos(360/s*i)+'px';
    a[i].style.top=rii*Math.sin(360/s*i)+'px';
    a[i].style.fontSize=parseFloat(sp[i].style.fontSize)*0.96+'px';
   }
   R-=R*0.1;
   if(R<2){
    o.innerHTML = '';
    o.parentNode.removeChild(o);
    clearInterval(clearI);
   }
  }
  var clearI = setInterval(spr,20);
 }
}
window.onload = function(){
 function happyNewYear(){
  new fireworks();
 }
 setInterval(happyNewYear,1000);
}
</script>
<style type="text/css">
</style>
</head>
<body style="background:#000;font:12px Georgia, 'Times New Roman', Times, serif">
</body>
</html>


提示:您可以先修改部分 代码再运行

 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>firework - Zehee</title>
<script type="text/javascript">
var firework = function(){
 this.size = 40;
 this.speed = 0.1;
 this.rise();
}
firework.prototype = {
 color:function(){
  var c = ['0','3','6','9','c','f'];
  var t = [c[Math.floor(Math.random()*100)%6],'0','f'];
  t.sort(function(){return Math.random()>0.5?-1:1;});
  return '#'+t.join('');
 },
 aheight:function(){
  var h = document.documentElement.clientHeight;
  return Math.abs(Math.floor(Math.random()*h-200))+201;
 },
 firecracker:function(){
  var b = document.createElement('div');
  var w = document.body.clientWidth;
  b.style.color = this.color();
  b.style.position = 'absolute';
  b.style.bottom = 0;
  b.style.left = Math.floor(Math.random()*w)+1+'px';
  document.body.appendChild(b);
  return b;
 },
 rise:function(){
  var o = this.firecracker();
  var n = this.aheight();
  var speed = this.speed;
  var e = this.expl;
  var s = this.size;
  var k = n;
  var m = function(){
   o.style.bottom = parseFloat(o.style.bottom)+k*speed+'px';
   k-=k*speed;
   if(k<2){
    clearInterval(clear);
    e(o,n,s,speed);
   }
  }
  o.innerHTML = '*';
  if(parseInt(o.style.bottom)<n){
   var clear = setInterval(m,20);
  }
 },
 expl:function(o,n,s,speed){
  var R = n/3;
  var Ri = n/6;
  var r = 0;
  var ri = 0;
  for(var i=0;i<s;i++){
   var span = document.createElement('span');
   var p = document.createElement('p');
   span.style.position = 'absolute';
   span.style.left = 0;
   span.style.top = 0;
   span.innerHTML = '*';
   p.style.position = 'absolute';
   p.style.left = 0;
   p.style.top = 0;
   p.innerHTML = '+';
   o.appendChild(span);
   o.appendChild(p);
  }
  function spr(){
   r += R*speed;
   ri+= Ri*speed/2;
   sp = o.getElementsByTagName('span');
   p = o.getElementsByTagName('p');
   for(var i=0; i<sp.length;i++){
    sp[i].style.left=r*Math.cos(360/s*i)+'px';
    sp[i].style.top=r*Math.sin(360/s*i)+'px';
    p[i].style.left=ri*Math.cos(360/s*i)+'px';
    p[i].style.top=ri*Math.sin(360/s*i)+'px';
   }
   R-=R*speed;
   if(R<2){
    clearInterval(clearI);
    o.parentNode.removeChild(o);
   }
  }
  var clearI = setInterval(spr,20);
 }
}
window.onload = function(){
 function happyNewYear(){
  new firework();
 }
 setInterval(happyNewYear,400);
}
</script>
<style type="text/css">
</style>
</head>
<body style="background:#000;font:12px Arial">
</body>
</html>


提示:您可以先修改部分 代码再运行

 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
</head>
<style type="text/css">
.fire{display:block; overflow:hidden; font-size:12px; position:absolute};
body{overflow:hidden; background:#000}
html{overflow:hidden; background:#000}
</style>
<body>
</body>
<script type="text/javascript">
var Fire = function(r, color) {
 this.radius = r || 12;
 this.color = color || "FF6600";
 this.xpos = 0;
 this.ypos = 0;
 this.zpos = 0;
 this.vx = 0;
 this.vy = 0;
 this.vz = 0;
 this.mass = 1;
 this.p = document.createElement("span");
 this.p.className = "fire";
 this.p.innerHTML = "*";
 this.p.style.fontSize = this.radius + "px";
 this.p.style.color = "#" + this.color;
}
Fire.prototype = {
 append: function(parent) {
  parent.appendChild(this.p);
 },
 setSize: function(scale) {
  this.p.style.fontSize = this.radius * scale + "px";
 },
 setPosition:function(x, y) {
  this.p.style.left = x + "px";
  this.p.style.top =  y + "px";
 },
 setVisible: function(b) {
  this.p.style.display = b ? "block" : "none";
 }
}
var fireworks = function() {
 var fires = new Array();
 var count = 100;
 var fl = 250;
 var vpx = 500;
 var vpy = 300;
 var gravity = .3;
 var floor = 200;
 var bounce = -.8;
 var timer;
 return {
  init: function() {
   for (var i=0; i<count; i++) {
    var color = 0xFF0000;
    color = (Math.random() * 0xFFFFFF).toString(16).toString().split(".")[0];
    while(color.length < 6) {
     color = "0" + color;
    }
    var fire = new Fire(12, color);
    fires.push(fire);
    fire.ypos = -100;
    fire.vx = Math.random() * 6 - 3;
    fire.vy = Math.random() * 6 - 3;
    fire.vz = Math.random() * 6 - 3;
    fire.append(document.body);
   }
   var that = this;
   timer = setInterval(function() {
    for (var i=0;i<count; i++) {
     that.move(fires[i]);
    }
   }, 30);
  },
  move: function(fire) {
   fire.vy += gravity;
   fire.xpos += fire.vx;
   fire.ypos += fire.vy;
   fire.zpos += fire.vz;
   if (fire.ypos > floor) {
    fire.ypos = floor;
    fire.vy *= bounce;
   }
   if (fire.zpos > -fl) {
    var scale = fl/ (fl+fire.zpos);
    fire.setSize(scale);
    fire.setPosition(vpx + fire.xpos * scale,
         vpy + fire.ypos * scale);
    fire.setVisible(true);
   } else {
    fire.setVisible(false);
   }
  }
 }
}
fireworks().init();
</script>
</html>


提示:您可以先修改部分 代码再运行

 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
</head>
<style type="text/css">
.fire{display:block; overflow:hidden; font-size:12px; position:absolute};
body{overflow:hidden; background:#000}
html{overflow:hidden; background:#000}
</style>
<body>
</body>
<script type="text/javascript">
var Fire = function(r, color) {
 this.radius = r || 12;
 this.color = color;
 this.xpos = 0;
 this.ypos = 0;
 this.zpos = 0;
 this.vx = 0;
 this.vy = 0;
 this.vz = 0;
 this.mass = 1;
 this.x =0;
 this.y=0;
 this.p = document.createElement("span");
 this.p.className = "fire";
 this.p.innerHTML = "*";
 this.p.style.fontSize = this.radius + "px";
 this.p.style.color = "#" + this.color;
}
Fire.prototype = {
 append: function(parent) {
  parent.appendChild(this.p);
 },
 setSize: function(scale) {
  this.p.style.fontSize = this.radius * scale + "px";
 },
 setPosition:function(x, y) {
  this.p.style.left = x + "px";
  this.p.style.top =  y + "px";
 },
 setVisible: function(b) {
  this.p.style.display = b ? "block" : "none";
 }
}
var fireworks = function() {
 var fires = new Array();
 var count = 150;
 var fl = 250;
 var vpx = 500;
 var vpy = 300;
 var gravity = .5;
 var floor = 200;
 var bounce = -.8;
 var timer;
 var wind = ((Math.floor(Math.random()*3) + 3)/10)*(Math.random()*2 - 1 > 0 ? 1 : -1)*.25;
 var wpos = 0;
 var wcount;
 return {
  init: function() {
   wcount = 50 + Math.floor(Math.random() * 100);
   for (var i=0; i<count; i++) {
    var color = 0xFF0000;
    color = (Math.random() * 0xFFFFFF).toString(16).toString().split(".")[0];
    while(color.length < 6) {
     color = "0" + color;
    }
    var fire = new Fire(12, color);
    fires.push(fire);
    fire.ypos = -100;
    fire.vz = Math.random() * 6 - 3;
    fire.vx = (Math.random()*2 - 1)*2 ;
    fire.vy = Math.random()*-15 - 15;
    fire.x = 500
    fire.y = 600;
    fire.append(document.body);
   }
   var that = this;
   timer = setInterval(function() {
    wpos++;
    if (wpos >= wcount) {
     wpos = 0;
     wcount = 50 + Math.floor(Math.random() * 100);
     wind = ((Math.floor(Math.random()*3) + 3)/10)*(Math.random()*2 - 1 > 0 ? 1 : -1)*.25;
    }
    for (var i=0;i<count; i++) {
     that.move(fires[i]);
    }
   }, 30);
  },
  move: function(fire) {
   fire.vy += gravity;
   fire.x += fire.vx;
   fire.y += fire.vy;
   fire.vx += wind;
   fire.setPosition(fire.x, fire.y);
    if (fire.x < 0 || fire.x >1000 || fire.y  < 0 || fire.y  > 600) {
     fire.vx = (Math.random()*2 - 1)*2;
     fire.vy = Math.random()*-15 - 15;
     fire.x = 500;
     fire.y = 600;
     fire.setPosition(fire.x, fire.y);
    }
  }
 }
}
fireworks().init();
</script>
</html>


提示:您可以先修改部分 代码再运行

Tags: 分享几种JS烟花 
分类:css+div | 评论:2 | 引用:0
上一篇:IE6弹出层盖不住下拉菜单的解决方案
下一篇:Div+Css实例:用CSS控制字符宽度省略号效果

或许你还对下面的文章感兴趣

Comments

  • quote 1.inal
  • 所有代码放一个页面效果也蛮好看的
  • 2011-4-4 21:47:48 回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

<#template:pagebar#>

最新文章

最新评论

Guest