Canvas 唯美雨落代码实现

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>唯美雨落</title>
    <meta name="Keywords" content="关键词1,关键词2">
    <meta name="description" content="网页的描述内容">
    <!--响应式mate标签-->
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <base target="_blank"/>

    <style>
    </style>
</head>
<body>

    <canvas id="canvas" style="position: absolute; top: 0px; left: 0px; opacity: 0.58;" width="1366" height="216"></canvas>

    <script src="http://cdn.bootcss.com/jquery/2.1.3/jquery.min.js"></script>
    <script type="text/javascript">

        var c = document.getElementById("canvas");
        var ctx = c.getContext("2d");
        var w = c.width = window.innerWidth;
        var h = c.height = window.innerHeight;
        var clearColor = ‘rgba(0, 0, 0, 0.1)‘;
        var max = 60;
        var drops = [];

        function random(min, max) {
            return Math.random() * (max - min) + min;
        }

        function randomColor(){
            var r = Math.floor(Math.random()*256);
            var g = Math.floor(Math.random()*256);
            var b = Math.floor(Math.random()*256);
            return "rgb("+r+","+g+","+b+")";//IE7不支出rgb
        };

        function O() {}
        O.prototype = {
            init: function() {
                this.x = random(0, w);
                this.y = 0;
                this.color = randomColor();
                this.w = 2;
                this.h = 1;
                this.vy = random(4, 5);
                this.vw = 3;
                this.vh = 1;
                this.size = 2;
                this.hit = random(h * .8, h * .9);
                this.a = 0.5;
                this.va = .96;
            },
            draw: function() {
                if (this.y > this.hit) {
                    ctx.beginPath();
                    ctx.moveTo(this.x, this.y - this.h / 2);
                    ctx.bezierCurveTo(
                            this.x + this.w / 2, this.y - this.h / 2,
                            this.x + this.w / 2, this.y + this.h / 2,
                            this.x, this.y + this.h / 2);

                    ctx.bezierCurveTo(
                            this.x - this.w / 2, this.y + this.h / 2,
                            this.x - this.w / 2, this.y - this.h / 2,
                            this.x, this.y - this.h / 2);

                    ctx.strokeStyle = ‘hsla(180, 100%, 50%, ‘+this.a+‘)‘;
                    ctx.stroke();
                    ctx.closePath();

                } else {
                    ctx.fillStyle = this.color;
                    ctx.fillRect(this.x, this.y, this.size, this.size * 5);
                }
                this.update();
            },
            update: function() {
                if(this.y < this.hit){
                    this.y += this.vy;
                } else {
                    if(this.a > .03){
                        this.w += this.vw;
                        this.h += this.vh;
                        if(this.w > 100){
                            this.a *= this.va;
                            this.vw *= .98;
                            this.vh *= .98;
                        }
                    } else {
                        this.init();
                    }
                }

            }
        }

        function resize(){
            w = c.width = window.innerWidth;
            h = c.height = window.innerHeight;
        }

        function setup(){
            canvas.style.opacity = "0.58";
            for(var i = 0; i < max; i++){
                (function(j){
                    setTimeout(function(){
                        var o = new O();
                        o.init();
                        drops.push(o);
                    }, j * 100)
                }(i));
            }
        }

        function anim() {
            ctx.fillStyle = clearColor;
            ctx.fillRect(0,0,w,h);
            for(var i in drops){
                drops[i].draw();
            }
            requestAnimationFrame(anim);
        }

        window.addEventListener("resize", resize);

        setup();
        anim();

    </script>
</body>

</html>

效果图:

IT技术和行业交流群 417691667

时间: 2024-11-09 06:28:34

Canvas 唯美雨落代码实现的相关文章

Android自定义View【实战教程】5??---Canvas详解及代码绘制安卓机器人

友情链接: Canvas API Android自定义View[实战教程]3??--Paint类.Path类以及PathEffect类详解 神马是Canvas 基本概念 Canvas:可以理解为是一个为我们提供了各种工具的画布,我们可以在上面尽情的绘制(旋转,平移,缩放等等).可以理解为系统分配给我们一个一个内存空间,然后提供了一些对这个内存空间操作的方法(API), 实际存储是在下面的bitmap. 两种画布 这里canvas可以绘制两种类型的画图,分别是view和surfaceView. V

HTML5 canvas学习小例代码

1.HTML5中的Canvas标签的创建 window.onload = function(){ createCanvas(); } function createCanvas(){ var canvas_width= 200, canvas_height = 200; document.body.innerHTML = "<canvas id=\"canvas\" width=\""+canvas_width+"\" heigh

[ html canvas ] canvas绘制太阳系实例代码

1 <!DOCTYPE html> 2 <html lang='zh-cn'> 3 <head> 4 <title>Insert you title</title> 5 <meta name='description' content='this is my page'> 6 <meta name='keywords' content='keyword1,keyword2,keyword3'> 7 <meta htt

canvas雪花效果核心代码

var ca = document.getElementById("ca"); var ctx = ca.getContext('2d'); //生成n~m之间的随机数的函数 function random(n,m){ return Math.floor(Math.random() * (m - n) + n); } //角度转弧度的函数 function toRd(angle){ return angle * Math.PI / 180; } //设置变量存储画布的最大宽高度 var

Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解

上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas和Paint,从细节上更进一步的讲解自定义View的详细绘制方法.如果把自定义View比作盖一座房子,那么上篇文章就相当于教会了我们怎么一步步的搭建房子的骨架,而本篇文章将要教会我们的是为房子的骨架添砖加瓦直至成型,甚至是怎么装修. Canvas 为了后文更为方便的讲解Canvas的常用方法的使用,我们先来做一些准备工作,创建一个自定义V

HTML5新增Canvas标签及对应属性、API详解(基础一)

知识说明: HTML5新增的canvas标签,通过创建画布,在画布上创建任何想要的形状,下面将canvas的API以及属性做一个整理,并且附上时钟的示例,便于后期复习学习!Fighting! 一.标签原型 <canvas width=”1000” height=”1000” id=”myCanvas”> 您的浏览器版本过低,不支持HTML5新增的canvas标签. </canvas> 使用js获取该画布,并指定对象 <script> Var canvasID = doc

移动端canvas抗锯齿

未抗锯齿效果图: 加入抗锯齿代码效果: var Game = function(){ var H = document.documentElement.clientHeight || document.body.clientHeight; var W = document.documentElement.clientWidth || document.body.clientWidth; this.canvas = document.getElementById("canvas"); t

Canvas API

概述 绘图方法 图像处理方法 drawImage方法 getImageData方法,putImageData方法 toDataURL方法 save方法,restore方法 像素处理 灰度效果 复古效果 红色蒙版效果 亮度效果 反转效果 参考链接 概述 Canvas API(画布)用于在网页实时生成图像,并且可以操作图像内容,基本上它是一个可以用JavaScript操作的位图(bitmap). 使用前,首先需要新建一个canvas网页元素. <canvas id="myCanvas"

Canvas画图在360浏览器中跑偏的问题

问题描述,canvas画图的js代码中编写的是画正方形的代码,结果在360浏览器上变成了长方形,不知道怎么回事,请问各位大神是否遇到过此类问题? 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 5 <title></title> 6