JavaScript canvas实现雪花随机动态飘落


Posted in Javascript onFebruary 08, 2020

用canvas实现雪花随机动态飘落,供大家参考,具体内容如下

JavaScript canvas实现雪花随机动态飘落

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<style>
  body{
    margin: 0;
    padding: 0;
  }
  canvas{
    background: #000;
  }
</style>
<body>
  <canvas id = "snow">

  </canvas>
  <script>
    var canvas = document.getElementById('snow');
    var context = canvas.getContext('2d');
    // 获得可视区的宽高
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    function snow(){
      context.save();
      // 开启路径
      context.beginPath();
      // 移动画布,确定雪花终点为中心点
      context.translate(100,100);
      //起点
      context.moveTo(-20,0);
      // 终点
      context.lineTo(20,0);
      // 线变成白色
      context.strokeStyle = '#fff';
      // 线变粗
      context.lineWidth = 10;
      // 线变圆头
      context.lineCap = 'round';
      context.stroke();
      // 角度转弧度
      var disX = Math.sin(30*Math.PI/180)*20;
      var disY = Math.sin(60*Math.PI/180)*20;
      // 画第二条线,左下到右上的线
      context.moveTo(-disX,disY);
      context.lineTo(disX,-disY);
      // 画第三条线
      context.moveTo(-disX,-disY);
      context.lineTo(disX,disY);
      context.stroke();
      context.restore();
    }
    // snow();
    //生成雪花的构造函数
    function Snow(x,y,scale,rotate,speedX,speedY,speedR){
           this.x = x;
           this.y = y;
           this.scale = scale;
           this.rotate = rotate;
           this.speedX = speedX;
           this.speedY = speedY;
           this.speedR = speedR;
          // 渲染雪花
          this.render = function(){
            context.save();
            context.beginPath();
            context.translate(this.x,this.y);
            context.scale(this.scale,this.scale);
            context.rotate(this.rotate*Math.PI/180);
            context.moveTo(-20,0);
            context.lineTo(20,0);
            context.strokeStyle = '#fff';
            context.lineWidth = 10;
            context.lineCap = 'round';
            context.stroke();
            var disX = Math.sin(30*Math.PI/180)*20;
            var disY = Math.sin(60*Math.PI/180)*20;
            context.moveTo(-disX,disY);
            context.lineTo(disX,-disY);
            context.moveTo(-disX,-disY);
            context.lineTo(disX,disY);
            context.stroke();
            context.restore();

          }

    }
    // var snow = new Snow(50,50,1,10,10,10,10);
    // snow.render();
    // 存储所有生成的雪花
    var snowArray = [];
    // 生成雪花
      function init(){
        var len = 100;
        for(var i = 0;i<len;i++){
          var x = Math.random()*canvas.width;
          var scale = Math.random()+0.5;
          var rotate = Math.random()*60;
          var speedX = Math.random()+1
          var speedY = Math.random()+5;
          var speedR = Math.random()*4+2;
          // var snow = new Snow(x,0,scale,rotate,speedX,speedY,speedR);
          // snow.render();
          (function(x,y,scale,rotate,speedX,speedY,speedR){
            setTimeout(function(){
            var snow = new Snow(x,0,scale,rotate,speedX,speedY,speedR);
            snow.render();
            snowArray.push(snow);
          },Math.random()*8000);   
          })(x,0,scale,rotate,speedX,speedY,speedR);
      }snowing();
    }init();
      // 动起来
      function snowing(){
        setInterval(function(){
          //先清除
          context.clearRect(0,0,canvas.width,canvas.height);
          for(var i = 0;i < snowArray.length;i++){
            snowArray[i].x = (snowArray[i].x+snowArray[i].speedX)%canvas.width;
            snowArray[i].y = (snowArray[i].y+snowArray[i].speedY)%canvas.height;
            snowArray[i].rotate = (snowArray[i].rotate+snowArray[i].speedR)%60;
            snowArray[i].render();
          }
        },30);
      }
    
    /**
     * sin60 = 对边/斜边 =>  对边 = sin60*斜边  =>  y=sin60*半径(r);
     */
  </script>
</body>
</html>

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

Javascript 相关文章推荐
极酷的javascirpt,让你随意编辑任何网页
Feb 25 Javascript
jquery获得当前html页面源码的方法
Jul 14 Javascript
使用Javascript写的2048小游戏
Nov 25 Javascript
js倒计时简单实现方法
Dec 17 Javascript
jQuery插件echarts去掉垂直网格线用法示例
Mar 03 Javascript
Angularjs自定义指令实现分页插件(DEMO)
Sep 16 Javascript
bootstrap 通过加减按钮实现输入框组功能
Nov 15 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
Apr 09 Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 Javascript
js实现坦克移动小游戏
Oct 28 Javascript
vue输入框使用模糊搜索功能的实现代码
May 26 Javascript
vue-openlayers实现地图坐标弹框效果
Sep 24 Javascript
JS实现简易留言板增删功能
Feb 08 #Javascript
原生JS实现留言板功能
Feb 08 #Javascript
javascript实现留言板功能
Feb 08 #Javascript
JavaScript实现PC端横向轮播图
Feb 07 #Javascript
vue更改数组中的值实例代码详解
Feb 07 #Javascript
Vue 一键清空表单的实现方法
Feb 07 #Javascript
Vue中qs插件的使用详解
Feb 07 #Javascript
You might like
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
CURL状态码列表(详细)
2013/06/27 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
php中mysql连接方式PDO使用详解
2015/02/25 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
2017/09/23 jQuery
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
js+html5实现手机九宫格密码解锁功能
2018/07/30 Javascript
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Python下载懒人图库JavaScript特效
2015/05/28 Python
python的else子句使用指南
2016/02/27 Python
python负载均衡的简单实现方法
2018/02/04 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
Python bytes string相互转换过程解析
2020/03/05 Python
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
C#如何进行LDAP用户校验
2012/11/21 面试题
学习“七一”讲话精神体会
2014/07/08 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
保研导师推荐信
2015/03/25 职场文书
python数字图像处理实现图像的形变与缩放
2022/06/28 Python
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python