canvas动画案例

案例一

效果图如下:

代码:


<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        html, body {
            width: 100%;
            height: 100%;
            background-color: black;
            overflow: hidden;
        }
    </style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
    var animate={
        screenW:document.documentElement.clientWidth,
        screenH:document.documentElement.clientHeight,
        content2d:null,
        x:null,
        y:null,
        r:10,
        hz:0,
        arc:[],
        //随机圆心坐标
        randomloc:function(){
            var x=Math.floor(Math.random()*this.screenW);
            var y=Math.floor(Math.random()*this.screenH);
            return[x,y]
        },
        //随机颜色
        randomcolor:function(){
            return "#" + parseInt(Math.random() * 16777216).toString(16);
        },
        //画圈圈
        draw:function(){
            this.x=this.randomloc()[0];
            this.y=this.randomloc()[1];
            this.content2d.beginPath();
            var color=this.randomcolor();
            this.content2d.strokeStyle=color;
            this.content2d.arc(this.x,this.y,this.r,Math.PI*2,0);
            this.content2d.stroke();
            this.content2d.closePath();
            this.arc.push(
                    [this.x,this.y,this.r,color,0]
            )
        },
        //获取canvas
        init:function(){
            var canvas=document.getElementById("canvas");
            canvas.width=this.screenW;
            canvas.height=this.screenH;
            this.content2d = canvas.getContext("2d");
        },
        update:function(){
            for(var i=0;i<this.arc.length;i++){
                this.content2d.clearRect(this.arc[i][0] - this.arc[i][2] - 1, this.arc[i][1] - this.arc[i][2] - 1, this.arc[i][2] * 2.2, this.arc[i][2] * 2.2);
                this.content2d.beginPath();
                var color=this.arc[i][3];
                this.content2d.strokeStyle=color;
                this.arc[i][2]++;
                if (this.arc[i][2] > 20) {
                    this.arc[i][2] = 10;
                    this.arc[i][4]++;
                    if (this.arc[i][4] > 4) {
                        this.arc.splice(i, 1);
                        i--;
                        continue;
                    }
                }
                this.content2d.arc(this.arc[i][0], this.arc[i][1], this.arc[i][2], 0, Math.PI * 2);
                this.content2d.stroke();
                this.content2d.closePath();
                
            }
        }

    };
    animate.init();
    window.requestAin=(function(){
        return window.requestAnimationFrame||
                        webkitRequestAnimationFrame||
                        mozRequestAnimationFrame||
                        msRequestAnimationFrame||
                        function(e){
                            setTimeout(e,1000/60)
                        }
    })();
    (function loop(){
        window.requestAin(loop);
        animate.hz++;
        if(animate.hz>4){
            animate.hz=0;
            animate.draw();
            animate.update();
        }
    })();
</script>
</body>
</html>

案例二

效果图如下:

代码:


<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        html,body{
            width: 100%;
            height: 100%;
            background-color: black;
            overflow: hidden;
        }
    </style>

</head>
<body>
<canvas id="canvas"></canvas>
<script>
    var canvas=document.getElementById("canvas");
    canvas.width=window.innerWidth;
    canvas.height=window.innerHeight;
    var content2d=canvas.getContext("2d");
    var balls = [];
    function ball(){
        //声明变量
        this.x=null;
        this.y=null;
        this.color=null;
        this.r = null;
        this.Angle = null;
        this.AngleX=null;
        this.AngleY=null;
        this.init=function(x,y){
            //初始化状态
            this.x=x;
            this.y=y;
            this.color=this.randomColor();
            this.r=this.randomNum(10,25);
            this.Angle=Math.random()*Math.PI*2;
            this.AngleX=this.randomNum(6,12)*Math.cos(this.Angle);
            this.AngleY=this.randomNum(6,12)*Math.sin(this.Angle);
        };
        //随机颜色
        this.randomColor=function(){
            return "#"+parseInt(Math.random() * 16777216).toString(16);
        };
        this.randomNum=function(min,max){
            return Math.random()*max+min;
        };
        this.move=function(){
            this.x+=this.AngleX;
            this.y+=this.AngleY;
            this.r-=0.3;
            this.AngleX*=0.9;
            this.AngleY*=0.9;

        }
    }
    function removeBall(){
        for(var i=0;i<balls.length;i++){
            var b=balls[i];
            if(b.r<0.3)
            {
                balls.splice(i,1);
                i--;
            }
        }

    }

    function createBall(x, y) {
        var count = parseInt(Math.random() * 30 + 10);
        for (var i = 0; i < count; i++) {
            var b = new ball();
            b.init(x, y);
            balls.push(b);
        }
    }
    //画圆
    function Draw(){
        for(var i=0;i<balls.length;i++){
            var b=balls[i];
            b.move();
            content2d.beginPath();
            content2d.lineWidth=3;
            content2d.fillStyle= b.color;
            content2d.arc(b.x, b.y, b.r,0,Math.PI*2);
            content2d.fill();
            content2d.closePath();

        }
    }
    loop();
    function loop(){
        content2d.clearRect(0,0,canvas.width,canvas.height);//清空整个canves
        Draw();
        removeBall();
        window.requestAnimationFrame(loop);
    }
    canvas.onmouseup=function(e){
        var x= e.pageX;
        var y= e.pageY;
        createBall(x,y);
    }

</script>

</body>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_43684713/article/details/87781678
今日推荐