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 相关文章推荐
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
Jan 06 Javascript
js中的屏蔽的使用示例
Jul 30 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
Mar 12 Javascript
初步认识JavaScript函数库jQuery
Jun 18 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
Aug 29 Javascript
JS自定义混合Mixin函数示例
Nov 26 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
详解node+express+ejs+bootstrap构建项目
Sep 27 Javascript
Webpack的dll功能使用
Jun 28 Javascript
详解vue-cli3使用
Aug 14 Javascript
Vue + element 实现多选框组并保存已选id集合的示例代码
Jun 03 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数组操作
2011/12/30 PHP
PHP Directory 函数的详解
2013/03/07 PHP
Thinkphp实现MySQL读写分离操作示例
2014/06/25 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
js内置对象 学习笔记
2011/08/01 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
使用Python的Twisted框架编写简单的网络客户端
2015/04/16 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
美国女孩洋娃娃店:American Girl
2017/10/24 全球购物
餐厅销售主管职责范本
2014/02/19 职场文书
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
预备党员党支部意见
2015/06/02 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python