原生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 相关文章推荐
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
Nov 11 Javascript
各浏览器对click方法的支持差异小结
Jul 31 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
Sep 29 Javascript
将两个div左右并列显示并实现点击标题切换内容
Oct 22 Javascript
Js实现自定义右键行为
Mar 26 Javascript
基于JavaScript实现智能右键菜单
Mar 02 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 Javascript
javaScript 逻辑运算符使用技巧整理
May 03 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
Sep 11 Javascript
js 计算图片内点个数的示例代码
Apr 04 Javascript
Vue 动态组件components和v-once指令的实现
Aug 30 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 根据url自动生成缩略图并处理高并发问题
2014/01/23 PHP
PHP实现简单的模板引擎功能示例
2017/09/02 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
Javascript模块模式分析
2008/05/16 Javascript
基于JQuery的cookie插件
2010/04/07 Javascript
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
Python list操作用法总结
2015/11/10 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
python中import学习备忘笔记
2017/01/24 Python
python数据结构之链表详解
2017/09/12 Python
如何基于python实现归一化处理
2020/01/20 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
公司年底活动方案
2014/08/17 职场文书
校外活动方案
2014/08/28 职场文书
革命英雄事迹演讲稿
2014/09/13 职场文书
2014年个人总结范文
2015/03/09 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
面试通知单大全
2015/04/20 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
Golang 切片(Slice)实现增删改查
2022/04/22 Golang
处理canvas绘制图片模糊问题
2022/05/11 Javascript