javascript canvas实现雨滴效果


Posted in Javascript onJune 09, 2021

本文实例为大家分享了javascript canvas实现雨滴效果的具体代码,供大家参考,具体内容如下

先看效果

javascript canvas实现雨滴效果

看起来很炫酷,其实就是实现了雨滴的掉落还有最后的圆

还是看源码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        body {
            background-color: #000;
        }
    </style>
</head>

<body>
    <canvas></canvas>
    <script>
        // 获取画布
        var canvas = document.querySelector('canvas')
        // 获取画笔
        var ctx = canvas.getContext('2d')
        // 不能用css改变画布大小
        var ch = canvas.height = window.innerHeight
        var cw = canvas.width = window.innerWidth
        // 放雨滴
        var arrRain = []
        // 监听屏幕大小,屏幕发生变化让画布也跟着改变大小
        window.onresize = function () {
            ch = canvas.height = window.innerHeight
            cw = canvas.width = window.innerWidth
        }
        // 获取一个随机数,目的是为了生成随机雨滴
        function randow(min, max) {
            return Math.random() * (max - min) + min
        }
        // 构造函数
        function Rain() {

        }
        // 为rain添加属性和方法
        Rain.prototype = {
            // 初始化位置和雨滴下落的圆的半径
            init: function () {
                this.x = randow(0, cw)
                this.y = 0
                // 雨滴最终落地的距离不能超出屏幕
                this.h = randow(0.8 * ch, 0.9 * ch)
                this.r = 1 // 开始圆的半径
                this.vr = 1 // 半径增长的速度
                this.vy = randow(4, 5)

            },
            // 画方法
            draw: function () {
                // 小于h的时候,画雨滴,画矩形
                if (this.y < this.h) {
                    ctx.beginPath()
                    ctx.fillStyle = 'white'
                    ctx.fillRect(this.x, this.y, 4, 10)
                } else {
                    // 画圆
                    ctx.beginPath()
                    ctx.strokeStyle = 'white'
                    ctx.arc(this.x, this.y, this.r, 0, 2 * Math.PI)
                    ctx.stroke()
                }
            },
            // 雨滴移动
            move: function () {
                // 小于h时,加y实现雨滴移动
                if (this.y < this.h) {
                    this.y += this.vy
                } else {
                    // 实现水花四溅的效果
                    if (this.r < 70) {
                        this.r += this.vr
                    } else {
                        // 结束效果之后初始化,又从天上生成雨滴,所以要调用init函数
                        this.init()
                    }
                }
                this.draw()
            }
        }
        // 生成雨滴
        function createRain(num) {
            for (var i = 0; i < num; i++) {
                // 随机生成雨滴,不是同时生成
                setTimeout(function () {
                    var rain = new Rain()
                    rain.init()
                    rain.draw()
                    arrRain.push(rain)
                }, 300 * i)
            }
        }
        createRain(60)
        setInterval(function () {
            ctx.beginPath()
            ctx.fillStyle = 'rgba(0,0,0,0.05)'
            ctx.fillRect(0, 0, cw, ch)
            for (var k of arrRain) {
                k.move()
            }
        }, 1000 / 80)
    </script>
</body>

</html>

这些也就是雨滴实现的源码,仅供参考。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
创建公共调用 jQuery Ajax 带返回值
Aug 01 Javascript
jQuery 处理页面的事件详解
Jan 20 Javascript
jQuery树形下拉菜单特效代码分享
Aug 15 Javascript
JavaScript动态设置div的样式的方法
Dec 26 Javascript
jquery实现一个简单的表单验证实例
Mar 30 Javascript
jquery实现下拉框功能效果【实例代码】
May 06 Javascript
微信小程序 picker-view 组件详解及简单实例
Jan 10 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 Javascript
vue-cli开发环境实现跨域请求的方法
Apr 07 Javascript
vue 设置proxyTable参数进行代理跨域
Apr 09 Javascript
Vue列表渲染的示例代码
Nov 01 Javascript
js如何获取访问IP、地区、当前操作浏览器
Jul 23 Javascript
用JS实现飞机大战小游戏
Jun 09 #Javascript
原生JS实现飞机大战小游戏
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 #Vue.js
JavaScript如何优化逻辑判断代码详解
Jun 08 #Javascript
浅谈react useEffect闭包的坑
Vue中插槽slot的使用方法与应用场景详析
vue+elementui 实现新增和修改共用一个弹框的完整代码
You might like
解析php中如何调用用户自定义函数
2013/08/06 PHP
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
PHP制作万年历
2015/01/07 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP不使用内置函数实现字符串转整型的方法示例
2017/07/03 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
Python中对列表排序实例
2015/01/04 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
一名女生的自荐信
2013/12/08 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
爱祖国演讲稿
2014/05/04 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
加强作风建设演讲稿
2014/10/24 职场文书
三方协议书
2015/01/27 职场文书
立项申请报告范本
2015/05/15 职场文书
好员工观后感
2015/06/17 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
python如何正确使用yield
2021/05/21 Python
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS