原生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的闭包
Jan 17 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
Dec 17 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
Mar 26 Javascript
简化版手机端照片预览组件
Apr 13 Javascript
js控制div弹出层实现方法
May 11 Javascript
jquery对table做排序操作的实例演示
Aug 10 jQuery
Angularjs渲染的 using 指令的星级评分系统示例
Nov 09 Javascript
快速解决vue-cli在ie9+中无效的问题
Sep 04 Javascript
vue根据值给予不同class的实例
Sep 29 Javascript
微信小程序实现页面浮动导航
Jan 28 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
May 16 Javascript
Vue中rem与postcss-pxtorem的应用详解
Nov 20 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+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
jQuery 表格插件整理
2010/04/27 Javascript
php与js的区别是什么
2013/08/05 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
微信小程序之购物车功能
2020/09/23 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
vue写一个组件
2018/04/09 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
Javascript 类型转换、封闭函数及常见内置对象操作示例
2019/11/15 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
selenium+PhantomJS爬取豆瓣读书
2019/08/26 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
什么是跨站脚本攻击
2014/12/11 面试题
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
中专毕业生的自荐书
2014/07/01 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
地震捐款倡议书
2014/08/29 职场文书
2015年英语教学工作总结
2015/05/25 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
餐厅开业活动方案
2019/07/08 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang