目录

  • 前言
  • 实现canvas雪夜下雪效果
    • 1、设置canvas标签的id为cvs,设置背景颜色为黑色
    • 2、设置body外边距为0
    • 3、通过获取DOM元素获得画板
    • 4、指定二维绘图
    • 5、设置宽高填满页面
    • 6、设置雪点的颜色
    • 7、定义一个雪点数据
    • 8、定义一个下雪函数
    • 9、调用下雨函数
  • 二、完整代码及运行效果
    • 完整代码
    • 运行结果![在这里插入图片描述](https://img-blog.csdnimg.cn/1d4df5ec497449b5acc035353e738f03.gif#pic_center)

前言

<canvas>是HTML 5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形

实现canvas雪夜下雪效果

1、设置canvas标签的id为cvs,设置背景颜色为黑色

<canvas id="cvs" style="background-color: #000;"></canvas>

2、设置body外边距为0

<body style="margin: 0;">

3、通过获取DOM元素获得画板

// 获取面版const cvs = document.querySelector("#cvs");

4、指定二维绘图

getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性
getContext(‘2d’):它指定了二维绘图,并且导致这个方法返回一个环境对象,该对象导出一个二维绘图 API。

const ctx = cvs.getContext('2d');

5、设置宽高填满页面

// 取出屏幕的宽高
const {clientWidth:width,clientHeight:height} = document.documentElement;
// 重设canvas的宽高
cvs.width =width;
cvs.height =height;

6、设置雪点的颜色

ctx.fillStyle='#ffffff';

7、定义一个雪点数据

设置雪点个数为500个

const bgColors = Array.from(new Array(500)).map(v=>{return {x:Math.random()*width,  // 在宽度范围内随机y:Math.random()*height, // 在高度范围内随机step:Math.random()*2.5+0.5, // 运动速度随机}
})

8、定义一个下雪函数

函数内部:requestAnimationFrame()高频执行 → clearRect()清除画布 → beginPath()重新绘图的准备 → forEach遍历雪点 → fill()重设矩形 → fill()渲染 → 往下飘

const render = ()=>{// 2.清空ctx.clearRect(0,0,width,height);// 3.重新绘图的标识ctx.beginPath();// 4.遍历bgColors.forEach(v=>{// 7.往下飘的效果v.y = v.y > height?0:(v.y+v.step)// 5.重设一个矩形ctx.rect(v.x,v.y,3,3)})// 6.渲染ctx.fill();//  1.requestAnimationFrame制作高频执行requestAnimationFrame(render);}

9、调用下雨函数

render();

二、完整代码及运行效果

完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Document</title>
</head>
<body style="margin: 0;"><canvas id="cvs" style="background-color: #000;"></canvas>
</body>
<script>const cvs = document.querySelector("#cvs");const ctx = cvs.getContext('2d');// 取出屏幕的宽高const {clientWidth:width,clientHeight:height} = document.documentElement;// 重设canvas的宽高cvs.width =width;cvs.height =height;// 设置雪点的颜色ctx.fillStyle='#ffffff';// 定义雪点的数组// 设置雪点个数为400个const bgColors = Array.from(new Array(400)).map(v=>{return {x:Math.random()*width,  // 在宽度范围内随机y:Math.random()*height, // 在高度范围内随机step:Math.random()*2.5+0.5, // 运动速度随机}})// 定义render函数const render = ()=>{// 清空ctx.clearRect(0,0,width,height);// 重新开始ctx.beginPath();// 遍历bgColors.forEach(v=>{// 往下飘的效果v.y = v.y>height?0:(v.y+v.step)// 重设ctx.rect(v.x,v.y,3,3)})// 渲染ctx.fill();//  requestAnimationFrame制作高频执行requestAnimationFrame(render);}// 调用render()函数render()
</script>
</html>

运行结果

20多行js实现canvas雪夜下雪效果相关推荐

  1. 原生js实现canvas气泡冒泡效果

    说明: 本文章主要分为ES5和ES6两个版本 ES5版本是早期版本,后面用ES6重写优化的,建议使用ES6版本. 1, 原生js实现canvas气泡冒泡效果的插件,api丰富,使用简单 2, 只需引入 ...

  2. Canvas编程练习:20几行js代码实现雷达扫描动画效果

    灵感源于一不小心挖了一个陈年老贴etherdream发的<[分享]魔兽技能冷却效果(希望能有更好的思路)>的坟,看他的代码太长(约200行),于是自己动手写了一个,也就20多行代码,效果也 ...

  3. HTML5+CSS3+JS实现满屏下雪效果

    效果图: 全部代码: <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  4. three.js打造酷炫下雪效果

    代码: <!doctype html> <html><head><meta charset="UTF-8"><meta nam ...

  5. php公告滚动源码,10行js代码实现上下滚动公告效果方法

    本文主要给大家介绍了关于利用10行js代码实现滚动公告效果的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧.希望能帮助到大家 ...

  6. canvas下雪效果(原生js)

    效果展示: 源码展示: <!doctype html> <html> <head><meta charset="utf-8">< ...

  7. canvas冬天下雪js特效代码

    下载地址 canvas冬天下雪特效代码 dd:

  8. 登顶 GitHub 趋势榜,标星1.8k:200 行 JS 代码让画面人物瞬间消失!

    整理 | 夕颜 出品 | CSDN(ID:CSDNnews) 今天,一个名为 Real-Time-Person-Removal(实时人物去除)项目在GitHub上火了,登上近日GitHub Trend ...

  9. 画线标记html,markline.js——轻量级canvas绘制标记线的库

    这段时间要做的是一个数据可视化的小型项目.其中最基本要求是实现两点之间的迁徙关系(比如同一个用户不同时间上网的地点)用一条有向线段(markline)联系在一起.很自然的我一开始想的就是采用百度的ec ...

最新文章

  1. django模型sqlserver_让Django模型在MSSQL上工作的麻烦?
  2. Gotchas 44-引用和临时对象
  3. C语言经典算法 21-30
  4. 【转】采购订单长文本增强
  5. Go 语言学习笔记(一):基础知识
  6. C# WinFrom 去掉groupbox的边框
  7. windows界面程序设计,设置一个窗口始终在屏幕最前,SetWindowPos函数
  8. 数据库(第一范式,第二范式,第三范式)
  9. 用python开发windows程序 [转]
  10. CentOS7 一键安装KMS服务【整理】
  11. 如何压缩word文档大小?
  12. <<视觉问答>>2022:MuKEA: Multimodal Knowledge Extraction and Accumulation for Knowledge-based VQA
  13. unity关于中文字体显示问题
  14. Java SSLSocket的使用
  15. VASP自旋(NM、AM、AFM)
  16. 群辉NAS+为知笔记docker定制私有云笔记
  17. 教你用Python语音合成,以及文字转语音~
  18. 独孤思维:赚钱的黄金法则
  19. python返回绝对值的函数_Python中用于返回绝对值的abs()方法
  20. 火了:一只蝙蝠的自述

热门文章

  1. ShellExecuteEx完美封装,程序提权执行,脚本vbs、bat、exe均可执行
  2. ACWing 2021寒假每日一题题解
  3. GPS快速定位之----AGPS、EPO
  4. 2021年全球与中国回转支承行业市场规模及发展前景分析
  5. 查看网络计算机端口,怎么查网络端口被占用?如何查看某个端口被谁占用
  6. 2014年中国市场智能手机销量排行榜,前十国外品牌只剩两
  7. abandon connection, owner thread: xxxx, connected at : 1606897800625, open stackTrace
  8. 域名证书到期,如何通过nginx更换https证书
  9. GMT时间、UTC时间、Unix时间戳
  10. Unity烘焙常见问题