怎样用JavaScript实现简单的雨滴效果?
Admin 2021-09-11 群英技术资讯 470 次浏览
今天给大家分享的是关于javascript实现雨滴效果的内容,实现效果如下,有雨滴掉落及最后变成圆的效果,那么这是怎样做的呢?下文有实例供大家参考,接下来跟随小编一起看看吧。
先看效果
看起来很炫酷,其实就是实现了雨滴的掉落还有最后的圆
还是看源码
<!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的内容,大家可以关注群英网络其它相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
node的异步机制是基于“事件”的,所有的I/O、网络通信、数据库查询都以非阻塞的方式执行,返回结果由事件循环来处理。Node在同一时刻只会处理一个事件,完成后立即进入事件循环检查后面事件。这样CPU和内存在同一时间集中处理一件事,同时尽量让耗时的I/O等操作并行执行。
这篇文章主要介绍了解决vue-pdf查看pdf文件及打印乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Vue的两大核心,1. 数据驱动 - 数据驱动界面显示;2. 模块化 - 复用公共模块,组件实现模块化提供基础
关于JavaScript命名约定下文有详细的介绍,小编觉得挺实用的,对大家学习或工作或许有帮助,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
JS有哪些高效的魔法运算符?对于JS运算符大家应该都比较熟悉,但JavaScript在不断更新,也会增加不少高效的运算法,这篇文章给大家分享一些高效的魔法运算符,感兴趣的朋友就继续往下看吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008