<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. 不通过App Store实现ios应用分发下载安装

    最近公司的项目准备着手宣传工作了,宣传手册上要印制App的下载地址二维码,但是客户端应用还未上线,需要一种临时的方案解决应用分发下载问题,通常ios应用必须通过苹果应用商店才能下载安装,但是也可以看到 ...

  2. Dwz下拉菜单的二级联动

    在DWZ文档中对组合框combox的是这样描述的: 在传统的select 用class 定义:class=”combox”, html 扩展:保留原有属性name,  增加了属性:ref. ref 属 ...

  3. tree view

    <TreeView x:Name="treeParameter" Width=" Margin="11,6,11,6" ItemsSource= ...

  4. Understanding, Operating and Monitoring Apache Kafka

    Apache Kafka is an attractive service because it's conceptually simple and powerful. It's easy to un ...

  5. java基本数据类型及相互间的转换

    1.首先复习一下java的基本数据类型,见下图 2.比较他们的字节数 备注:1字节(Byte)=8位(Bit) 3.转换中的知识点 *java中整数类型默认的int类型:小数类型默认的double: ...

  6. 【MongoDB】1.安装--以及简单使用

    第一次接触MongoDB    参考&粘贴:http://jingyan.baidu.com/article/ed15cb1b52b8661be2698162.html 一.安装 1.首先去官 ...

  7. JVM参数调优

    JVM参数调优 JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,d ...

  8. java读取properties配置文件信息

    一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...

  9. directive中的参数详解

    restrictE: 表示该directive仅能以element方式使用,即:<my-dialog></my-dialog>A: 表示该directive仅能以attribu ...

  10. Android如何缩减APK包大小

    代码 保持良好的编程习惯,不要重复或者不用的代码,谨慎添加libs,移除使用不到的libs. 使用proguard混淆代码,它会对不用的代码做优化,并且混淆后也能够减少安装包的大小. native c ...