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 相关文章推荐
csdn 批量接受好友邀请
Feb 19 Javascript
jQuery toggle()设置CSS样式
Nov 05 Javascript
input输入框鼠标焦点提示信息
Mar 17 Javascript
js实现顶部可折叠的菜单工具栏效果实例
May 09 Javascript
bootstrap table 多选框分页保留示例代码
Mar 08 Javascript
js实现扫雷小程序的示例代码
Sep 27 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
Aug 28 Javascript
小程序组件之仿微信通讯录的实现代码
Sep 12 Javascript
Vue数字输入框组件示例代码详解
Jan 15 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
Mar 05 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
Dec 29 Javascript
Html5生成验证码的示例代码
May 10 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等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
微信小程序 基础知识css样式media标签
2017/02/15 Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
2018/03/21 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
利用pyinstaller将py文件打包为exe的方法
2018/05/14 Python
python3中property使用方法详解
2019/04/23 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
如何使用Python调整图像大小
2020/09/26 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
面向对象编程的优势是什么
2015/12/17 面试题
酒店管理专业学生求职信
2013/09/27 职场文书
年度考核自我鉴定
2013/11/09 职场文书
生物工程专业求职信
2014/09/03 职场文书
教师批评与自我批评剖析材料
2014/10/16 职场文书
教导主任个人总结
2015/03/03 职场文书
校长师德表现自我评价
2015/03/05 职场文书
暂停营业通知
2015/04/25 职场文书
趣味运动会标语口号
2015/12/26 职场文书
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers
基于PyQt5制作一个群发邮件工具
2022/04/08 Python
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers