使用HTML5 canvas 制作雪花效果

时间:2022-12-22 00:21:49

在制作圣诞节活动时候要制作下雪的效果。这有2种方法:

一、使用js插件,比如基于jQurey的snow.min.js

二、使用Html5的绘图API canvas

第一种方法简便,要引入jq,对于小页面会有点浪费,因为要引入jq框架。第二种方法会出现兼容性问题,IE9以下的浏览器不支持或者部分支持HTML5,但制作简单方便,效果好。

一个简单的html5绘制雪花的示例如下:

html部分

<html>

<head><style type="text/css"> #canvas{background:#000;} </style> </head>

<body> <canvas id="canvas"></canvas></body>

</html>

js部分:

<script type="text/javascript">
window.onload=function(){
       var _canvas=document.getElementById('canvas'),//获取canvas容器
        _ctx=_canvas.getContext('2d'),//获取canvas画布
        _h=window.innerHeight,//高度为窗口高度
     _w=window.innerWidth,//宽度为窗口宽度
        _count=30,//雪花数量
     _angle=0,//下落角度
           _snow=[];//雪花容器
    _canvas.height=_h
    _canvas.width=_w;
   
    for(var i=0;i<_count;i++){
     _snow.push({
        x:Math.random()*_w,
     y:Math.random()*_h,
     r:Math.random()*9+1,
     d:Math.random()*_count
    });
    } 
   function _draw(){
        _ctx.clearRect(0,0,_w,_h);
     _ctx.beginPath();
     _ctx.fillStyle="rgba(255,255,255,0.8)";
     for(var i=0;i<_count;i++){
      var _s=_snow[i];
      _ctx.moveTo(_s.x,_s.y);
      _ctx.arc(_s.x,_s.y,_s.r,0,Math.PI*2,true);    
     }
     _ctx.fill();
     _update();
   }
  
   function _update(){
       _angle+=0.1;
    for(var i=0;i<_count;i++){
     var _s=_snow[i];
     _s.y+=Math.cos(_angle+_s.d)+1+_s.r/2;
     _s.x+=Math.sin(_angle)*2;
       
     if(_s.x>_w+10 || _s.x<-10 || _s.y>_h){
      if(i%3>0){
       _snow[i]={x:Math.random()*_w,y:-20,r:_s.r,d:_s.d};
      }else{
        if(Math.sin(_angle)>0){
         _snow[i]= {x: -10, y: Math.random()*_h, r: _s.r, d: _s.d};
        }else{
            _snow[i]= {x:_w+10, y: Math.random()*_h, r: _s.r, d: _s.d};
        }
      }
}
    
    }
   }
   setInterval(_draw,30);
}
</script>