• 动画原理——脉动(膨胀缩小)&&无规则运动


    书籍名称:HTML5-Animation-with-JavaScript

    书籍源码:https://github.com/lamberta/html5-animation

    1.脉动是一种半径r来回反复的运动,在canvas中他是对原图形的方法和缩小。可以将sin应用在控制大小的属性scaleX,scaleY。

    以下代码在先前的实例中对index.html的进行修改即可。

    index.html

    <!doctype html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Pulse</title>
        <link rel="stylesheet" href="../include/style.css">
      </head>  
      <body>
        <header>
          Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a>
        </header>
        <canvas id="canvas" width="400" height="400"></canvas>
        
        <script src="../include/utils.js"></script>
        <script src="./classes/ball.js"></script>
        <script>
        window.onload = function () {
          var canvas = document.getElementById('canvas'),
              context = canvas.getContext('2d'),
              ball = new Ball(),
              angle = 0,
              centerScale = 1,
              range = 0.5,
              speed = 0.05;
            
          ball.x = canvas.width / 2;
          ball.y = canvas.height / 2;
            
          (function drawFrame () {
            window.requestAnimationFrame(drawFrame, canvas);
            context.clearRect(0, 0, canvas.width, canvas.height);
            //利用正弦设置放大的倍数
            ball.scaleX = ball.scaleY = centerScale + Math.sin(angle) * range;
            angle += speed;
            ball.draw(context);
          }());
        };
        </script>
      </body>
    </html>

    2.对球体的位置x,y分别用一个sin函数来表示,且角度递增的速度不一样,可以实现无规则运动,代码如下

    仍然只是index.html

    <!doctype html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>Random</title>
        <link rel="stylesheet" href="../include/style.css">
      </head>  
      <body>
        <header>
          Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a>
        </header>
        <canvas id="canvas" width="400" height="400"></canvas>
        
        <script src="../include/utils.js"></script>
        <script src="./classes/ball.js"></script>
        <script>
        window.onload = function () {
          var canvas = document.getElementById('canvas'),
              context = canvas.getContext('2d'),
              ball = new Ball(),
              angleX = 0,
              angleY = 0,
              range = 50,
              centerX = canvas.width / 2,
              centerY = canvas.height / 2,
              xspeed = 0.07,
              yspeed = 0.11;
            
          (function drawFrame () {
            window.requestAnimationFrame(drawFrame, canvas);
            context.clearRect(0, 0, canvas.width, canvas.height);
    
            ball.x = centerX + Math.sin(angleX) * range;
            ball.y = centerY + Math.sin(angleY) * range;
            angleX += xspeed;
            angleY += yspeed;
            ball.draw(context);
          }());
        };
        </script>
      </body>
    </html>
  • 相关阅读:
    Kubernetes DNS服务配置案例
    Dockerfile常用指令
    Docker常用命令
    Kubernetes常用命令
    阿里云ECS安装Kubernetes问题收集与解答
    712. Minimum ASCII Delete Sum for Two Strings
    845. Longest Mountain in Array
    815. Bus Routes
    204. Count Primes
    190. Reverse Bits
  • 原文地址:https://www.cnblogs.com/winderby/p/4243319.html
Copyright © 2020-2023  润新知