zoukankan      html  css  js  c++  java
  • [Canvas学习]动画

    学习目的:通过JavaScript操控<canvas>对象,实现交互动画。

    动画的基本步骤

    1. 清空canvas,使用clearRect方法

    2. 保存canvas状态

    3. 绘制动画图形

    4. 恢复canvas状态

    操控动画Controlling an animation

     setInterval(function, delay)

     setTimeout(function, delay)

     requestAnimationFrame(callback)

    太阳系运动的小例子

    <canvas id="canvas" width="300" height="300"></canvas>
    <script type="text/javascript">
      var sun = new Image();
      var moon = new Image();
      var earth = new Image();
      var cvs = document.getElementById("canvas");
      /**
      * 创建三张图片并完成动画
      * @return {[type]} [description]
      */
      function init(){
        sun.src = "image/Canvas_sun.png";
        earth.src = "image/Canvas_earth.png";
        moon.src = "image/Canvas_moon.png";
        requestAnimationFrame(draw);
      }
      /**
      * 分别通过平移旋转来设置不同的canvas状态完成三张图片的绘制
      * @return {[type]} [description]
      */
      function draw(){
        if(cvs.getContext){
          var ctx = cvs.getContext("2d");
          ctx.globalCompositeOperation = "destination-over";
          //1. 清空clearRect
          ctx.clearRect(0,0,300,300);
          //2. 保存canvas状态
          ctx.fillStyle = "rgba(0,0,0,0,4)";
          ctx.strokeStyle = "rgba(0,153,255,0.4)";
          ctx.save();
          ctx.translate(150,150);//sun图片大小为300*300
          //3. 绘制图片
          var time = new Date();
          //绘制地球
          ctx.rotate((2*Math.PI/60)*time.getSeconds()+(2*Math.PI/60000)*time.getMilliseconds());//1分钟=60秒,设置地球围绕太阳的旋转周期为1min
          ctx.translate(105, 0);//地球运行轨迹半径为105
          ctx.fillRect(0,-12,50,24);//地球阴影
          ctx.drawImage(earth, -12, -12);//地球图片大小为24*24
          ctx.beginPath();
          ctx.arc(0,0,28.5,0,Math.PI*2,false);
          ctx.closePath();
          ctx.stroke();

          ctx.save();
          //绘制月球//此时canvas状态为默认状态
          ctx.rotate((2*Math.PI/60)*time.getSeconds()+(2*Math.PI/60000)*time.getMilliseconds());
          ctx.translate(0,28.5);//月球的运行轨迹半径为28.5
          ctx.drawImage(moon, -3.5, -3.5);//月球图片大小为7*7

          ctx.restore();
          ctx.restore();
          //最初的canvas状态
          ctx.beginPath();
          ctx.arc(150,150,105,0,Math.PI*2,false);
          ctx.closePath();
          ctx.stroke();
          ctx.drawImage(sun, 0, 0, 300, 300);

          requestAnimationFrame(draw);
        }
      }
      init();
    </script>

    canvas绘制动画时钟

    绘制时钟的方法有很多,分别介绍下不同的思路:

    1. 利用canvas来绘制动画时钟,通过平移旋转来实现线段和圆的绘制

    2. 利用HTML+CSS3来绘制动画时钟,也是通过CSS3的变形属性来实现线段和圆的绘制

    这两种实现方法都需要通过JavaScript来确定当前的时间点,从而确定各个指针的初始位置。

    绘制小球

    加入控制元素,如物理碰撞检测等

  • 相关阅读:
    使用VisualStudio进行单元测试之二
    使用VisualStudio进行单元测试之一
    ExtJS监听键盘事件:回车键实现登录功能
    PPTP无法连网
    Android深度探索.
    Android深度探索
    Android驱动开发
    window.open()的具体使用方法
    js控制的几种页面跳转和传值(转载)
    Hatching shader
  • 原文地址:https://www.cnblogs.com/joyjoe/p/6107671.html
Copyright © 2011-2022 走看看