原生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 Throttle &amp; Debounce应用介绍
Mar 19 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
Aug 26 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
Aug 28 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
Sep 22 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
Feb 15 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
May 17 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
Aug 10 Javascript
AngularJS开发教程之控制器之间的通信方法分析
Dec 25 Javascript
关于使用js算总价的问题
Jun 23 Javascript
js实现简单页面全屏
Sep 17 Javascript
Vue3.x源码调试的实现方法
Oct 13 Javascript
用React Native制作一个简单的游戏引擎
May 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
php 什么是PEAR?(第二篇)
2009/03/19 PHP
php 定界符格式引起的错误
2011/05/24 PHP
供参考的 php 学习提高路线分享
2011/10/23 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
PHP实现SMTP邮件的发送实例
2018/09/27 PHP
JavaScript 学习初步 入门教程
2010/03/25 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
JavaScript常用本地对象小结
2016/03/28 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
小程序实现投票进度条
2019/11/20 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
Flask实现跨域请求的处理方法
2018/09/27 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
蔻驰英国官网:COACH英国
2020/07/19 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
师范生个人推荐信
2013/11/29 职场文书
服装设计行业个人的自我评价
2013/12/20 职场文书
大学新生军训感言
2014/02/25 职场文书
超市创业计划书
2014/04/24 职场文书
学风建设演讲稿
2014/09/12 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
党员公开承诺书2016
2016/03/24 职场文书