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使用 全解析
Dec 15 Javascript
JS操作图片(增,删,改) 例子
Apr 17 Javascript
JS实现可改变列宽的table实例
Jul 02 Javascript
使用node+vue.js实现SPA应用
Jan 28 Javascript
JavaScript中的对象继承关系
Aug 01 Javascript
原生js实现节日时间倒计时功能
Jan 18 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
微信小程序 五星评分的实现实例
Aug 04 Javascript
BootstrapTable加载按钮功能实例代码详解
Sep 22 Javascript
React Native模块之Permissions权限申请的实例相机
Sep 28 Javascript
angularjs 的数据绑定实现原理
Jul 02 Javascript
在vue中通过render函数给子组件设置ref操作
Nov 17 Vue.js
用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中的日期加减方法示例
2014/08/21 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
JS实现的多张图片轮流播放幻灯片效果
2016/07/22 Javascript
js中开关变量使用实例
2017/02/24 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
2017/03/07 Javascript
webpack打包nodejs项目的方法
2018/09/26 NodeJs
JavaScript This指向问题详解
2019/11/25 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
python爬取内容存入Excel实例
2019/02/20 Python
Django REST framework 分页的实现代码
2019/06/19 Python
使用Pyhton集合set()实现成果查漏的例子
2019/11/24 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
说出数据连接池的工作机制是什么?
2013/04/19 面试题
高分子材料个人求职信范文
2013/09/25 职场文书
高中生期末评语大全
2014/01/28 职场文书
财务会计自荐信范文
2014/02/21 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
销售口号霸气押韵
2015/12/24 职场文书
工作转正自我鉴定范文
2019/06/21 职场文书
解决Redis启动警告问题
2022/02/24 Redis