<script type="text/javascript">
var head=document.createElement("HEAD");
document.documentElement.appendChild(head);
var title=document.createElement("TITLE");
head.appendChild(title);
var text=document.createTextNode("HTML5 Canvas Demo");
title.appendChild(text);
var b = document.createElement("BODY");
document.documentElement.appendChild(b);
var c=document.createElement("CANVAS");
var node=document.createTextNode("your browser does not support the canvas tag");
var img=document.createElement("IMG");
c.appendChild(node);
b.appendChild(c);
c.id="myCanvas";
c.width="600";
c.height="600";
c.style.border="3px solid #FF0000";
var FPS = 1000;
var FRAME_MSEC = 1000 / FPS >> 0;
var center_X = 300;
var center_Y = 300;
var max = 300; var $ = c.getContext("2d"); c.onmousedown = function(e){
b.appendChild(img);
var url = c.toDataURL();
img.src=url;
}
var n = 0;
setInterval(intervalHandler, FRAME_MSEC);
function intervalHandler() {
$.clearRect(0, 0, 600, 600);
var prevX = center_X;
var prevY = center_Y;
for (var i = 0; i < max; i++) {
$.beginPath();
$.lineWidth = 1;
$.strokeStyle = getColorHSV(i / max * 360 + n * 4000);
$.moveTo(prevX, prevY);
$.lineTo(
prevX = center_X + (i * Math.cos(i + (i * n))), //prevX, prevY values will change structures
prevY = center_Y + (i * Math.sin(i + (i * n))));
$.stroke();
}
n += .00025; //spin & transform speed control }
function getColorHSV(h) { //color scheme.
var ht = (((h %= 360) < 0) ? h + 360 : h) / 60;
var hi = Math.floor(ht);
var r, g, b;
var m = Math.round; switch (hi) {
case 0:
r = 0xff;
g = m(0xff * (ht - hi));
b = 0;
break;
case 1:
g = 0xff;
r = m(0xff * (1 - (ht - hi)));
b = 0;
break;
case 2:
g = 0xff;
b = m(0xff * (ht - hi));
r = 0;
break;
case 3:
b = 0xff;
g = m(0xff * (1 - (ht - hi)));
r = 0;
break;
case 4:
b = 0xff;
r = m(0xff * (ht - hi));
g = 0;
break;
case 5:
r = 0xff;
b = m(0xff * (1 - (ht - hi)));
g = 0;
break;
}
return "rgb(" + r + ", " + g + ", " + b + ")"; }
</script>

直接保存为xx.html文件,双击用浏览器打开,结果为一个不断旋转的动态图,示例请点开链接

http://fb.xin3e.com/jsgraph/canvans.html

结果截图如下

已经过作者同意……

随机推荐

  1. hdu 4753 2013南京赛区网络赛 记忆化搜索 ****

    看到范围基本可以想到dp了,处理起来有点麻烦 #include<iostream> #include<cstdio> #include<cstring> #incl ...

  2. RTP/RTCP的时间同步机制

    转自:http://blog.csdn.net/leesphone/article/details/5571972 RTP支持传送不同codec的steaming,不同codec的clock rate ...

  3. Spring之ResourceLoader加载资源

    Resource与ResourceLoader对比 1.Resource接口定义了应用访问底层资源的能力. 通过FileSystemResource以文件系统绝对路径的方式进行访问: 通过ClassP ...

  4. JQuery 操作对象的属性值

    通过JQuery去操作前台对象(div,span...)的属性是很常见的事情,本文就简单的介绍几种操作情形. 1):通过属性值去获取对象 2):用JQuery去修改对象的属性值 3):获取并修改对象的 ...

  5. Mac OS 您需要安装旧 Java SE 6 运行环境才能打开“XXX” 问题

    问题描述: 今天在Mac OS上安装一个app的时候提示 “您需要安装旧 Java SE 6 运行环境才能打开 XXX” ,在网上搜索了一下,有说要改app的info.plist文件的,将其中的JVM ...

  6. EditText根据焦点弹出软键盘

    //每次启动都清除焦点 myCourse_roomId_input.setText(""); myCourse_roomId_input.clearFocus(); //判断是否获 ...

  7. 【gulp-sass】error: File to import not found or unreadable

    简要记录一下在使用gulp-sass时候踩的坑,虽然不明所以然,但是似乎在https://github.com/dlmanning/gulp-sass/issues/1 找到了答案. 在使用gulpf ...

  8. C#与mysql做ASP.NET网页数据库查询速度测试

    两种方法是:1,使用mysql数据库的存储过程:2,C#编码,做网页后台与mysql数据库连接,前台测试显示测试过结果下面我将分别讲解两种方法的具体实现. 1,使用mysql数据库的存储过程插入万条大 ...

  9. 学习 Message(5): 关于 TApplicationEvents.OnMessage 的第二个参数 可以屏蔽 TWebBrowser右键菜单:

    http://www.cnblogs.com/del/archive/2008/10/25/1319318.html TApplicationEvents.OnMessage 的第二个参数 Handl ...

  10. http://blog.csdn.net/czmchen/article/details/42392985

    http://blog.csdn.net/czmchen/article/details/42392985