原生js+canvas实现下雪效果


Posted in Javascript onAugust 02, 2020

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

效果展示:

原生js+canvas实现下雪效果

源码展示:

<!doctype html>
<html>
<head>
 <meta charset="utf-8">
 <title>canvas下雪效果(原生js)</title>
 <style>
 * {
  margin: 0;
  padding: 0
 }
 
 html, body {
  width: 100%;
  height: 100%;
  overflow: hidden;
  background-color: #222;
 }
 
 #canvas {
  position: absolute;
  top: 0;
  left: 0;
 }
 </style>
</head>
<body>
<canvas id="canvas"></canvas>
<img id="imgSnow" width="0" height="0" src="xh.png" alt="雪花">
<img id="bgSnow" width="100%" height="100%" src="bj.jpg" alt="背景">
 
<script>
 window.onload = function () {
 var canvas = document.getElementById("canvas");
 var imgSnow = document.getElementById("imgSnow");
 var bgSnow = document.getElementById("bgSnow");
 var ctx = canvas.getContext('2d');
 
 var mbody = document.querySelector("body");
 
 canvas.width =mbody.offsetWidth;
 canvas.height = mbody.offsetHeight;
 
 var GetRandomNum = function (Min, Max) {
  var Range = Max - Min;
  var Rand = Math.random();
  return (Min + Math.round(Rand * Range));
 }
 
 // console.log(GetRandomNum(0, canvas.width))
 
 var snowArray = {}; //雪花对象
 var snowIndex = 0; //标识符
 var setting = {
  num: 30, //数量
  snowSize: 20, //大小
  startX: Math.random() * canvas.width, //起始横坐标
  startY: 0, //起始纵坐标
  vy: 0.01
 }
 
 function snow() {
  // 起始横坐标
  this.x = Math.random() * canvas.width;
  // 起始纵坐标
  this.y = setting.startY;
  this.size = setting.snowSize + Math.random() * 10 - 10;
 
  //横坐标偏移量
  this.vx = Math.random() * 3 - 2; //偏移量
  //纵坐标偏移量
  this.vy = Math.random() * 10;
 
  this.life = 0;
  this.maxLife = 100;
  this.id = snowIndex;
  //当前信息保存至对象snowArray
  snowArray[snowIndex] = this;
 
  snowIndex++;
 }
 
 snow.prototype.draw = function () {
  this.x += this.vx;
  this.y += this.vy;
  this.vy += setting.vy;
  this.life++;
 
  //删除
  if (this.y > canvas.height * 0.9 - 20) {
  snowArray[this.id]
  } else if (this.life >= this.maxLife) {
  snowArray[this.id]
  }
  ctx.drawImage(imgSnow, this.x, this.y, this.size, this.size)
 }
 
 setInterval(function () {
  ctx.drawImage(bgSnow, 0, 0, canvas.width, canvas.height);
 
  //数
  for (var i = 0; i < setting.num; i++) {
  if (Math.random() > 0.97) {
   new snow();
  }
  }
 
  for (var i in snowArray) {
  snowArray[i].draw();
  }
 
 }, 100)202082104246954
 }
</script>
 
</body>
</html>

图片:

原生js+canvas实现下雪效果

雪花:

原生js+canvas实现下雪效果

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

Javascript 相关文章推荐
推荐dojo学习笔记
Mar 24 Javascript
YUI 读码日记之 YAHOO.util.Dom - Part.1
Mar 22 Javascript
JS实现日期加减的方法
Nov 29 Javascript
直接在JS里创建JSON数据然后遍历使用
Jul 25 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
Bootstrap插件全集
Jul 18 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Dec 14 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
Sep 14 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 Javascript
简单了解TypeScript中如何继承 Error 类
Jun 21 Javascript
javascript实现移动端上传图片功能
Aug 18 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
Oct 27 Javascript
jQuery实现滑动开关效果
Aug 02 #jQuery
jQuery实现开关灯效果
Aug 02 #jQuery
JavaScript实现动态生成表格
Aug 02 #Javascript
javascript实现京东登录显示隐藏密码
Aug 02 #Javascript
Vue scoped及deep使用方法解析
Aug 01 #Javascript
Vue中computed及watch区别实例解析
Aug 01 #Javascript
Vue数组响应式操作及高阶函数使用代码详解
Aug 01 #Javascript
You might like
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
一个tab标签切换效果代码
2009/03/27 Javascript
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
javascript的函数作用域
2014/11/12 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
jQuery绑定自定义事件的魔法升级版
2016/06/30 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
javascript ES6 新增了let命令使用介绍
2017/07/07 Javascript
vue.js声明式渲染和条件与循环基础知识
2017/07/31 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
Python中asyncio模块的深入讲解
2019/06/10 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
详细介绍Python进度条tqdm的使用
2019/07/31 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
大学应届毕业生求职信
2014/05/24 职场文书
另类冲刺标语
2014/06/24 职场文书
报表员工作失误检讨书范文
2014/09/19 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android