`
touchinsert
  • 浏览: 1334750 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

用JavaScript实现动态图形

阅读更多

JavaScript实现动态图形

1JavaScript2D图形

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

It's time to reuse!

<shape id="_x0000_s1026" style="MARGIN-TOP: 0px; Z-INDEX: 1; MARGIN-LEFT: 0px; WIDTH: 7.5pt; POSITION: absolute; HEIGHT: 7.5pt" strokeweight="1pt" strokecolor="#c80000" stroked="f" fillcolor="#c80000" path="m95,95r500,l595,595r-500,xe" coordsize="100,100"></shape><shape id="_x0000_s1027" style="MARGIN-TOP: 0px; Z-INDEX: 2; MARGIN-LEFT: 0px; WIDTH: 7.5pt; POSITION: absolute; HEIGHT: 7.5pt" strokeweight="1pt" strokecolor="#0000c8" stroked="f" fillcolor="#0000c8" path="m295,295r500,l795,795r-500,xe" coordsize="100,100"><fill opacity=".5"></fill></shape>

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

<shapetype id="_x0000_t75" stroked="f" path="m@4@5l@4@11@9@11@9@5xe" coordsize="21600,21600" filled="f" o:preferrelative="t" o:spt="75"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 79.5pt; HEIGHT: 80.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5C%E8%B6%99%E7%A3%8A%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.png"></imagedata></shape><shape id="_x0000_i1026" style="WIDTH: 79.5pt; HEIGHT: 79.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5C%E8%B6%99%E7%A3%8A%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image004.png"></imagedata></shape><shape id="_x0000_i1027" style="WIDTH: 81pt; HEIGHT: 80.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5C%E8%B6%99%E7%A3%8A%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image006.png"></imagedata></shape><shape id="_x0000_i1028" style="WIDTH: 79.5pt; HEIGHT: 80.25pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5C%E8%B6%99%E7%A3%8A%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image008.png"></imagedata></shape>

下面是这一组图形的实现。<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 = '#<chmetcnv w:st="on" unitname="C" sourcevalue="6" hasspace="False" negative="False" numbertype="1" tcsc="0">6C</chmetcnv>0';

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

ctx.fillStyle = '#<chmetcnv w:st="on" unitname="F" sourcevalue="9" hasspace="False" negative="False" numbertype="1" tcsc="0">09F</chmetcnv>)';

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>

</div>

</td>

</tr>

<tr>

<td>

<div>

<canvas id="graph4" width="150" height="150">

</canvas>

</div>

</td>

<td>

<div>

<canvas id="graph5" width="150" height="150">

</canvas>

</div>

</td>

</tr>

</tbody>

</table>

</body>

</html>

2JavaScript 动态2D图形与数据交换

当我第一次接触http://www.liquidx.net/plotkit/时,我才意识到JavaScript的强大。PlotKitJavaScript Chart Plotting, JavaScript图形开发工具,它将JavaScript的绘图功能封装为三种较复杂的具有数据交互功能的图形,饼状图,矩形图和二维曲线图。

我使用二维曲线图和JavaScript Timer模拟简单的动态股票行情。

如下图,该图每1秒更新一次数据。

<shape id="_x0000_i1029" style="WIDTH: 424.5pt; HEIGHT: 162.75pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5C%E8%B6%99%E7%A3%8A%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image010.png"></imagedata></shape>

<shape id="_x0000_i1030" style="WIDTH: 425.25pt; HEIGHT: 162pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5C%E8%B6%99%E7%A3%8A%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image012.png"></imagedata></shape>

<script type="text/javascript" src="js/mochikit/MochiKit.js"></script>include Plotkitjs文件。

var plotter 为绘图对象

var newRows用来显示动态表数据, 图中的Last列。

var options 变量为绘图参数。

createData方法生成三组随机数据,既右图的3条变化曲线。

DrawChart更新图形和表数据。

Beginning创建图形和启动Timer

HTML Body中的

<object id="tabledata"

classid="clsid:<chmetcnv w:st="on" unitname="C" sourcevalue="333" hasspace="False" negative="False" numbertype="1" tcsc="0">333C</chmetcnv>7BC4<chmetcnv w:st="on" unitname="F" sourcevalue="460" hasspace="False" negative="True" numbertype="1" tcsc="0">-460F</chmetcnv>-11D0-BC04<chmetcnv w:st="on" unitname="C" sourcevalue="80" hasspace="False" negative="True" numbertype="1" tcsc="0">-0080C</chmetcnv><chmetcnv w:st="on" unitname="a" sourcevalue="7055" hasspace="False" negative="False" numbertype="1" tcsc="0">7055A</chmetcnv>83">

<param name="DataURL" value="table.csv" />

<param name="UseHeader" value="True" />

</object>

是从文件table.csv中导入表中的Symbol列和Name列。

table.csv的内容与格式如下:

Symbol,Name

ADBE,Adobe Systems Incorporated

AIG,American International Group Inc

BA,Boeing Company

<div id="chart" width="500" height="300"></div>是显示图形。

<html>

<script type="text/javascript" src="js/mochikit/MochiKit.js"></script>

<script type="text/javascript" src="js/plotkit/Base.js"></script>

<script type="text/javascript" src="js/plotkit/Layout.js"></script>

<script type="text/javascript" src="js/plotkit/Canvas.js"></script>

<script type="text/javascript" src="js/plotkit/SweetCanvas.js"></script>

<script type="text/javascript" src="js/plotkit/excanvas.js"></script>

<script type="text/javascript" src="js/plotkit/PlotKit_Packed.js"></script>

<script type="text/javascript" src="js/plotkit/EasyPlot.js"></script>

<script type="text/javascript">

var plotter = null;

var newRows = new Array();

var options = {

"IECanvasHTC": "/plotkit/excanvas.htc",

"backgroundColor":Color.blackColor(),

"drawYAxis": true,

"shouldFill" : true,

"xAxis": [13,18],

"yAxis":[20,50]

};

function createData(){

var data3 = [

[13.00, 49.3+Math.random()*5],

[13.1, 48.2+Math.random()*5],

[13.2, 48.4+Math.random()*5],

[13.3, 48.1+Math.random()*5],

[13.4, 48.6+Math.random()*5],

[13.5, 48.9+Math.random()*5],

[14, 50.1+Math.random()*5],

[14.1, 49.1+Math.random()*5],

[14.2, 49.8+Math.random()*5],

[14.2, 50.2+Math.random()*5],

[14.3, 48.1+Math.random()*5],

[14.4, 51.1+Math.random()*5],

[14.5, 52.1+Math.random()*5],

[15, 48.1+Math.random()*5],

[15.1, 48.2+Math.random()*5],

[15.2, 48.4+Math.random()*5],

[15.3, 48.1+Math.random()*5],

[15.4, 48.6+Math.random()*5],

[15.5, 48.9+Math.random()*5],

[15.5, 49.8+Math.random()*5],

[16, 49.9+Math.random()*5],

[16.1, 48.2+Math.random()*5],

[16.2, 48.4+Math.random()*5],

[16.3, 48.1+Math.random()*5],

[16.4, 48.6+Math.random()*5],

[16.5, 48.9+Math.random()*5],

[16.5, 47.1+Math.random()*5],

[17, 48.1+Math.random()*5],

[17.1, 49.1+Math.random()*5],

[17.2, 49.8+Math.random()*5],

[17.3, 48.1+Math.random()*5],

[17.4, 51.1+Math.random()*5],

[17.5, 48.4+Math.random()*5]];

var data1 = [[13.00, 39.3+Math.random()*5],

[13.1, 38.2+Math.random()*5],

[13.2, 38.4+Math.random()*5],

[13.3, 38.1+Math.random()*5],

[13.4, 38.6+Math.random()*5],

[13.5, 38.9+Math.random()*5],

[14, 40.1+Math.random()*5],

[14.1, 39.1+Math.random()*5],

[14.2, 39.8+Math.random()*5],

[14.2, 40.2+Math.random()*5],

[14.3, 38.1+Math.random()*5],

[14.4, 41.1+Math.random()*5],

[14.5, 42.1+Math.random()*5],

[15, 38.1], [15.5, 39.8+Math.random()*5],

[16, 39.9], [16.5, 37.1+Math.random()*5],

[17, 38.1], [17.5, 38.4+Math.random()*5]];

</sp
分享到:
评论

相关推荐

    JavaScript图形验证码的实现

    JavaScript验证码的简单实现,有简单的随机数字,也有较复杂的图形验证码, 这种图形验证码很高效简洁,使用爬虫是有较大难度的爬取网站信息的。 而且这种图形验证码的应用场景非常广,可用在登录注册等等需要上传...

    js实现动态图形

    JavaScript(简称JS)是一种轻量级的解释型编程语言,广泛应用于网页和互联网应用开发,包括实现动态图形。本文将深入探讨如何利用JavaScript和CSS来创建引人入胜的动态图形。 首先,JavaScript的核心在于其事件...

    javascript 模仿 windows 图形界面库

    通过JavaScript,我们可以操控DOM(Document Object Model)对象,实现元素的动态添加、删除和修改,从而实现用户界面的动态更新。 在“开始菜单”部分,开发者可以利用JavaScript事件监听和处理机制,模拟Windows...

    使用JavaScript实现基于SVG的WEBGIS动态交互.pdf

    "使用JavaScript实现基于SVG的WEBGIS动态交互.pdf" 随着WEBGIS技术的发展,地理信息系统(GIS)已经成为 WEB应用程序中的一部分。然而,基于SVG的WEBGIS系统中,交互性问题一直是制约其发展的瓶颈。JavaScript技术...

    JavaScript基础图形库研究与实现.pdf

    【JavaScript基础图形库研究与实现】的文档主要探讨如何利用JavaScript在Web页面上实现图形绘制功能,这通常需要借助HTML和JavaScript技术。由于HTML和JavaScript自身并不直接支持画图,传统的方法是使用VML(Vector...

    Arcgis Javascript API 动态标绘。

    在“BlogMap”项目中,开发者可能已经实现了基于ArcGIS JavaScript API 的地图应用,展示了动态标绘的各种实例。这个项目可能包含了如何创建和管理Graphic对象、处理地图事件、定制符号样式等方面的内容,为学习和...

    JavaScript高效图形编程--高清版.pdf

    根据您提供的信息,这份电子书的标题是《JavaScript高效图形编程--高清版》,描述中提到这是一本个人收集的学习用电子书,仅供学习使用,不可用于商业用途,且如果存在版权问题,应联系删除。标签为“计算机 编程”...

    js.zip_javascript_javascript 图形_js_js graphics

    Canvas是HTML5中用于绘制2D图形的API,它允许开发者使用JavaScript来绘制动态或静态的图形。Excanvas是基于Vml(Vector Markup Language)的一个实现,用于在不支持Canvas的浏览器上模拟Canvas的功能,确保了跨...

    JS:canvas的javascript图形编程

    ### JS:canvas的JavaScript图形编程深入解析 #### 引言 Canvas API是HTML5中引入的一项强大特性,允许网页开发者直接在网页上绘制图形、图像,实现动态视觉效果。然而,早期版本的Internet Explorer(IE)并不...

    用JavaScript实现Web页交互性.pdf

    "用JavaScript实现Web页交互性" 在当今的互联网时代,Web页已经成为人们获取信息的主要来源之一。早期的Web页主要使用静态的HTML语言编制的文档,但伴随着JavaScript等语言的出现,Web页已经具有了动态和交互的特性...

    HTML、CSS 和 JavaScript 实现动态烟花效果

    通过这个项目,你不仅能够学习到如何运用 Canvas API 进行图形绘制,还能掌握如何利用 JavaScript 实现动画效果。无论你是编程新手还是有经验的开发者,这个项目都将为你提供灵感和实践的机会,让我们一起探索如何在...

    10个JavaScript实现的图片特效

    在网页设计中,图片特效是提升用户体验的重要手段,本文将深入探讨使用JavaScript实现的四种图片特效:圆角+阴影效果、斜光阴影效果、相框效果以及水倒映效果。 首先,我们来看**圆角+阴影效果**。在CSS3中,我们...

    JavaScript书籍(JavaScript模式.pdf+JavaScript高效图形编程.pdf)

    5. **物理模拟**:利用JavaScript实现简单的物理效果,如碰撞检测、重力模拟等。 通过学习这两本书,开发者不仅可以掌握JavaScript的核心语法和最佳实践,还能了解到JavaScript在图形编程领域的强大潜力。不论是想...

    JavaScript画基本图形函数

    HTML5引入了Canvas元素,它是一个可编程的2D渲染上下文,允许我们用JavaScript直接在网页上绘制图形。Canvas API提供了丰富的绘图命令,可以实现复杂的图形绘制和动画效果。 #### 2.1 创建Canvas元素 ```html ...

    Javascript实现的UI图形包Flotr

    Flotr,http://solutoire.com/flotr/ 一个基于Canvas的Javascript图形包, 兼容IE8+,Google Chrome,Firefox。 可实现类似Windows资源显示器的cpu,memory类动态资源图,包括Line, Pie, Bar chart等。

    算法JavaScript实现

    在这个名为"算法JavaScript实现"的主题中,我们将深入探讨如何使用JavaScript这一广泛应用于Web开发的脚本语言来实现几种关键的算法。这些算法包括大根堆、Canvas棋盘覆盖法以及二分查询。 首先,让我们了解一下...

    javascript制作的图形验证码特效.zip

    这个"javascript制作的图形验证码特效.zip"文件似乎包含了一个使用JavaScript实现的图形验证码的示例。JavaScript是一种轻量级的、解释型的编程语言,主要应用于客户端的网页交互。在这个项目中,JavaScript被用来...

    JavaScript动态网页编程

    9. **Web API**:浏览器提供的Web API,如Fetch API用于网络请求,WebSocket实现双向通信,Web Storage(localStorage和sessionStorage)用于本地数据存储,Web Workers进行后台计算,Canvas和SVG实现图形绘制等。...

    JavaScript实现的3D球面标签云效果

    在本项目中,"JavaScript实现的3D球面标签云效果"是一个利用JavaScript创建的动态视觉效果,它将关键词或文字以3D形式展示在球面上,为用户带来新颖且互动的体验。 实现这个效果的关键技术主要包括以下几个方面: ...

Global site tag (gtag.js) - Google Analytics