首页 > 编程 > JavaScript > 正文

原生JS实现的雪花飘落动画效果

2019-11-19 13:55:32
字体:
来源:转载
供稿:网友

本文实例讲述了原生JS实现的雪花飘落动画效果。分享给大家供大家参考,具体如下:

<!DOCTYPE html><html><head>  <meta charset="utf-8">  <meta http-equiv="X-UA-Compatible" content="IE=edge">  <title>www.VeVB.COm JS下雪动画</title>  <meta name="description" content="">  <meta name="viewport" content="width=device-width, initial-scale=1"></head><style>  .masthead {    background-color:#333;    display:block;    width:100%;    height:400px;  }</style><body><div class="masthead"></div><script>  (function () {    var COUNT = 300;    var masthead = document.querySelector('.masthead');    var canvas = document.createElement('canvas');    var ctx = canvas.getContext('2d');    var width = masthead.clientWidth;    var height = masthead.clientHeight;    var i = 0;    var active = false;    function onResize() {      width = masthead.clientWidth;      height = masthead.clientHeight;      canvas.width = width;      canvas.height = height;      ctx.fillStyle = '#FFF';      var wasActive = active;      active = width > 600;      if (!wasActive && active)        requestAnimFrame(update);    }    var Snowflake = function () {      this.x = 0;      this.y = 0;      this.vy = 0;      this.vx = 0;      this.r = 0;      this.reset();    };    Snowflake.prototype.reset = function() {      this.x = Math.random() * width;      this.y = Math.random() * -height;      this.vy = 1 + Math.random() * 3;      this.vx = 0.5 - Math.random();      this.r = 1 + Math.random() * 2;      this.o = 0.5 + Math.random() * 0.5;    };    canvas.style.position = 'absolute';    canvas.style.left = canvas.style.top = '0';    var snowflakes = [], snowflake;    for (i = 0; i < COUNT; i++) {      snowflake = new Snowflake();      snowflakes.push(snowflake);    }    function update() {      ctx.clearRect(0, 0, width, height);      if (!active)        return;      for (i = 0; i < COUNT; i++) {        snowflake = snowflakes[i];        snowflake.y += snowflake.vy;        snowflake.x += snowflake.vx;        ctx.globalAlpha = snowflake.o;        ctx.beginPath();        ctx.arc(snowflake.x, snowflake.y, snowflake.r, 0, Math.PI * 2, false);        ctx.closePath();        ctx.fill();        if (snowflake.y > height) {          snowflake.reset();        }      }      requestAnimFrame(update);    }    // shim layer with setTimeout fallback    window.requestAnimFrame = (function(){      return window.requestAnimationFrame    ||          window.webkitRequestAnimationFrame ||          window.mozRequestAnimationFrame  ||          function( callback ){            window.setTimeout(callback, 1000 / 60);          };    })();    onResize();    window.addEventListener('resize', onResize, false);    masthead.appendChild(canvas);  })();</script></body></html>

使用本站HTML/CSS/JS在线运行测试工具http://tools.VeVB.COm/code/HtmlJsRun,可得到如下测试运行效果:

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript动画特效与技巧汇总》、《JavaScript页面元素操作技巧总结》、《JavaScript运动效果与技巧汇总》、《JavaScript图形绘制技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结

希望本文所述对大家JavaScript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表