zoukankan      html  css  js  c++  java
  • canvas实现固定元素背景雪花效果

    前台页面:

    <body id="test" style="background-color: gray;">
            <img src="img/banner.jpg" alt="" style="z-index: 0;"/>
            <label style=" position: absolute; left:200px;top:170px">请输入密码:</label>
            <input type="text" value="" style=" position: absolute; left:200px;top:200px; z-index: 1;"/>
            <input type="button" style=" position: absolute; left:220px;top:240px;z-index: 1;" value="登录"/>
            <input type="button" style=" position: absolute; left:300px;top:240px;z-index: 1;" value="注册"/>
            <script  type="text/javascript" >
                $("#test").geneEffect(); 
                 
            </script>
    </body>

    引入snow.js:

    (function($){
        $.fn.extend({
            geneEffect:function(options){
            var ecf=new effect(this,options);
                  //添加画布 
              this[0].appendChild(canvas);
            } 
        })
        var canvas = document.createElement('canvas');
           //样式设置
        canvas.style.position = 'absolute';
        canvas.style.left = canvas.style.top = '0';
        var ctx = canvas.getContext('2d');
        var enitites=[];
        var defaults={
               ele:$('body')[0],//元素
               type:"snow",//特效类型
                x: 0.5, //x轴移动速度
                y:1,//y轴移动速度
                w:600,//宽度
                h:500,//高度
                max:200,//存储的一次性产生的最大数目
                radius:1.5,//半径
                opacity:0.9,//透明度
                color: "#FFF"//颜色
            }
        var effect=function(ele,options){    
           if(options==null||typeof(options)=="undefined")
                 options={};
            options.ele=ele[0];
            canvas.width=ele[0].clientWidth;
               canvas.height=ele[0].clientHeight;
               //设置高度宽度 (与覆盖元素一样)
               this.width = ele[0].clientWidth;
               this.height =ele[0].clientHeight;
             //覆盖defaults
           defaults=$.extend({},defaults,options)
          defaults.w=this.width;
           defaults.h=this.height;
             //创建实体集合
           this.createEnities();
             //绘出界面
           update();
           
        }
        effect.prototype={
                
            createEnities:function(){
                 enitites=[];
                 for(var i=0;i<defaults.max;i++){
                    var def=new opt();
                    enitites.push(def);
                 }
            }
        }
            //实体类
        var opt=function(){
            this.init();//初始化方法
        }
        opt.prototype.init=function(){
                 this.x=defaults.w*Math.random()+defaults.x;
                 this.y=defaults.h*Math.random()+defaults.y;
                 this.opacity=defaults.opacity*Math.random();
                 this.radius=defaults.radius+Math.random();
                 this.type=defaults.type;
        }
             //每一帧走一次
        function update(){
                //清空画布 形成动画效果
                ctx.clearRect(0,0,canvas.width,canvas.height);
                var flag=0;
                for (var i=0;i<enitites.length;i++) {
                    var opt=enitites[i];
                    //如果是雪花特效
                    if(opt.type=="snow"){
                        opt.x=opt.x+Math.random()*0.5;
                        opt.y=opt.y+Math.random()*1;
                        //生产雪花 
                        snowEffect(opt.x,opt.y,opt.opacity, opt.radius);
                    }
                    //超过高度在执行一下init方法
                    if(opt.y>canvas.height)
                    {
                         opt.init();
                    }
                      
                } 
                //重绘画面接着执行update
                requestAnimFrame(update); 
                 
            }
            
        function snowEffect(x,y,o,r){
            //alert("1")
            ctx.save();
            //ctx.strokeStyle="#FFF";
            ctx.fillStyle = "#FFF";
            ctx.globalAlpha=o;
            ctx.beginPath();
            ctx.arc(x,y,r,0,Math.PI*2,false);
            ctx.fill();
            ctx.closePath();
            ctx.restore();
        }
         window.requestAnimFrame = (function () {
                return window.requestAnimationFrame ||
                    window.webkitRequestAnimationFrame ||
                    window.mozRequestAnimationFrame ||
                    function (callback) {
                        window.setTimeout(callback, 1000 / 60);
                    };
            })();
        
    })(jQuery)

    静态图效果如下():

  • 相关阅读:
    函数模板
    c#使用多线程的几种方式示例详解
    C#中数组、ArrayList和List三者的区别
    c# Thread类
    IEnumerable和IEnumerator 详解
    C#执行CMD命令并接收返回结果的实现方法
    C# Process.Start()方法详解
    C#Json转Xml格式数据的方法
    sql存储过程
    SQL存储过程基础
  • 原文地址:https://www.cnblogs.com/x0216u/p/7473566.html
Copyright © 2011-2022 走看看