原生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 相关文章推荐
用javascript控制iframe滚动的代码
Apr 10 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
Oct 21 Javascript
扩展JavaScript功能的正确方法(译文)
Apr 12 Javascript
js 触发select onchange事件代码
Mar 20 Javascript
JQuery中serialize()用法实例分析
Feb 06 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
Oct 27 Javascript
点击按钮出现60秒倒计时的简单js代码(推荐)
Jun 07 Javascript
JS简单实现移动端日历功能示例
Dec 28 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
Mar 02 Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
Oct 11 Javascript
jquery.pagination.js分页使用教程
Oct 23 jQuery
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
php插入排序法实现数组排序实例
2015/02/16 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
Javascript验证方法大全
2015/09/21 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
React Native react-navigation 导航使用详解
2017/12/01 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
2019/08/23 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
遗传算法python版
2018/03/19 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
python中逻辑与或(and、or)和按位与或异或(&amp;、|、^)区别
2020/08/05 Python
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
高校辅导员推荐信范文
2013/12/25 职场文书
《自选商场》教学反思
2014/02/14 职场文书
初一学生评语大全
2014/04/24 职场文书
村级四风对照检查材料
2014/08/24 职场文书
六一儿童节标语
2014/10/08 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL