现在的位置: 首页 > 综合 > 正文

用JavaScript实现动态图形

2012年09月29日 ⁄ 综合 ⁄ 共 6348字 ⁄ 字号 评论关闭

JavaScript实现动态图形

1JavaScript2D图形 

JavaScript的神奇之处远远超过一般程序员的想象。JavaScript可以实现所有的二维图形。看到我的Blog左面,它就是使用JavaScriptGoogle公司用JavaScript开发的excanvas写出来的。

It's time to reuse!

 

 

             什么是excanvas呢?FirefoxSafariOpera9都支持canvas tagcanvas用来绘制2D图形。但是IE不支持canvasGoogle就开发了excanvas,模拟canvas在其他浏览器的状态,这样IE也可以使用canvas了。下面是一组更复杂的图形:

 

             

             

下面是这一组图形的实现。<script type="text/javascript"></script>中,包含了excanvas的内容,因为Blog里不能放.js文件,我只能将excanvas的内容全面拷贝在HTML文件里。后面的function DrawChart(elname)function DrawChart5(elname),是绘图的5个方法。这5个方法都是我原文拷贝JavaScript canvas经典例子的源代码。

Html内容中,body tag负责调用这5个方法,其中的参数是canvas tag id

<body onload="DrawChart('graph');DrawChart2('graph2');DrawChart3('graph3');DrawChart4('graph4');DrawChart5('graph5');">

canvas tag是图形绘制的位置。

<canvas id="graph" width="200" height="200" style="border: 1px solid #eee;"></canvas>

 

 

<html>

<script type="text/javascript">

// Copyright 2006 Google Inc.

if (!window.CanvasRenderingContext2D) {

 

(function () {

 

  // alias some functions to make (compiled) code shorter

  var m = Math;

  var mr = m.round;

  var ms = m.sin;

  var mc = m.cos;

 

var G_vmlCanvasManager_ = {

 //可以在http://sourceforge.net/projects/excanvas/下载。

}

 

  function DrawChart(elname){

             var element=document.getElementById(elname);

             var el = G_vmlCanvasManager.initElement(element);

    var ctx = el.getContext("2d");

 

                           ctx.fillStyle = "rgb(200,0,0)";

                           ctx.fillRect (10, 10, 50, 50);

 

                           ctx.fillStyle = "rgba(0, 0, 200, 0.5)";

                           ctx.fillRect (30, 30, 50, 50);

 

              };

              function DrawChart2(elname) {

 

                  var start = new Date;

             var element=document.getElementById(elname);   

            var el = G_vmlCanvasManager.initElement(element);          

               var ctx = el.getContext("2d");

                  ctx.translate(75,75);

                  for (i=1;i<6;i++){

                            ctx.save();

                            ctx.fillStyle = 'rgb('+(51*i)+','+(255-51*i)+',255)';

                            for (j=0;j<i*6;j++){

                                ctx.rotate(Math.PI*2/(i*6));

                                ctx.beginPath();

                                ctx.arc(0,i*12.5,5,0,Math.PI*2,true);

                                ctx.fill();

                            }

                            ctx.restore();

                  }

              }            

              function DrawChart3(elname) {

                  var start = new Date;

             var element=document.getElementById(elname);   

            var el = G_vmlCanvasManager.initElement(element);          

            var ctx = el.getContext("2d");

             

                  // Draw background

                  ctx.fillStyle = 'rgb(255,221,0)';

                  ctx.fillRect(0,0,150,37.5);

                  ctx.fillStyle = 'rgb(102,204,0)';

                  ctx.fillRect(0,37.5,150,37.5);

                  ctx.fillStyle = 'rgb(0,153,255)';

                  ctx.fillRect(0,75,150,37.5);

                  ctx.fillStyle = 'rgb(255,51,0)';

                  ctx.fillRect(0,112.5,150,37.5);

             

                  // Draw semi transparent circles

                  for (i=0;i<10;i++){

                                                        ctx.fillStyle = 'rgba(255,255,255,'+(i+1)/10+')';

                                                        for (j=0;j<4;j++){

                                                            ctx.fillRect(5+i*14,5+j*37.5,14,27.5);

                                                        }

                  }

             

              }            

             

              function DrawChart4(elname) {

                  var start = new Date;

             var element=document.getElementById(elname);   

            var el = G_vmlCanvasManager.initElement(element);          

            var ctx = el.getContext("2d");

             

                  // draw background

                  ctx.fillStyle = '#FD0';

                  ctx.fillRect(0,0,75,75);

                  ctx.fillStyle = '#6C0';

                  ctx.fillRect(75,0,75,75);

                  ctx.fillStyle = '#09F)';

                  ctx.fillRect(0,75,75,75);

                  ctx.fillStyle = '#F30';

                  ctx.fillRect(75,75,150,150);

                  ctx.fillStyle = '#FFF';

             

                  // set transparency value

                  ctx.globalAlpha = 0.2;

             

                  // Draw semi transparent circles

                  for (i=0;i<7;i++){

                                                        ctx.beginPath();

                                                        ctx.arc(75,75,10+10*i,0,Math.PI*2,true);

                                                        ctx.fill();

                  }

              }            

              function DrawChart5(elname) {

                  var start = new Date;

             var element=document.getElementById(elname);   

            var el = G_vmlCanvasManager.initElement(element);          

            var ctx = el.getContext("2d");

             

                  ctx.fillStyle = "red";

             

                  ctx.beginPath();

                  ctx.moveTo(30, 30);

                  ctx.lineTo(150, 150);

                  ctx.quadraticCurveTo(60, 70, 70, 150);

                  ctx.lineTo(30, 30);

                  ctx.fill();

              }            

</script>

 

<body onload="DrawChart('graph');DrawChart2('graph2');DrawChart3('graph3');DrawChart4('graph4');DrawChart5('graph5');">

 

<table>

              <tbody>

                            <tr>

                                          <td>

                                                        <div >

                                                                      <canvas id="graph" width="200" height="200" style="border: 1px solid #eee;"></canvas>

                                                        </div>

                                          </td>

                                          <td>

                                                        <div>

                                                                                    <canvas id="graph2" width="200" height="200" style="border: 1px solid #eee;"></canvas>            

                                                        </div>

                                          </td>

                                          <td>

                                                                      <div>

                                                                                                  <canvas id="graph3" width="200" height="200" style="border: 1px solid #eee;"></canvas>   

                                                                     

抱歉!评论已关闭.