http://www.karlson.ru/jsgraphics/html/index.html
此JavaScript图形库可在网页上动态绘制圆、椭圆、斜线、折线、多边形(包括三角形、矩形)。底层通过创建大量1px*1px的DIV实现,同时对于连续的像素进行了优化,尽量地减少所需的DIV,因此有较好的性能,当然和Java2D、GDI+、OpenGL、DirectX、Flash、SVG、VML及HTML Canvas是无法相比较的。网站:http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm 。使用LGPL协议发布。
支持的浏览器:
Linux: Browsers with Gecko-Engine (Mozilla, Netscape 6+, Galeon), Konqueror, Opera 5, 6 and 7+.
Windows: Gecko-Browsers, IE 4, 5 and 6, Opera 5, 6 and 7+.
Mac: Safari, Gecko-Browsers, Opera, partially IE.
使用方法:
1、下载,并在页面中引入脚本:<script type="text/javascript" src="wz_jsgraphics.js"></script>
2、创建一个Div作为画布:<div id="myCanvas" style="position:relative;height:250px;width:100%;"></div>
3、在JavaScript中创建对象:
<script type="text/javascript">
<!--方法一:
var jg = new jsGraphics("myCanvas");
//-->
</script>
<script type="text/javascript">
<!--方法二:
var cnv = document.getElementById("myCanvas");
var jg = new jsGraphics(cnv);
//-->
</script>
jsgraphics图形库基本函数说明
设置画笔颜色 setColor("#hexcolor");
示例:
jg.setColor("#ff0000");
或
jg.setColor("red");
如果没有设置画笔颜色,则默认用黑色来画。
参数缺少时会出错。参数为非颜色值时也会出错(防错这一块,该库做得不是非常完善)。
设置画笔宽度 setStroke(number);
示例:
jg.setStroke(3);
或
jg.setStroke(Stroke.DOTTED); //点线
如果没有设置画笔宽度,默认是1点宽。宽度是指从一边到另一边的点数,设为3,就是准准的3点
,而不是5点。stroke.dotted为虚线,线的宽度为1。stroke.dotted也可以用-1来代替,其它负
值时,都是1点实线。
画线 drawLine(x1, y1, x2, y2);
示例:
jg.drawLine(20, 50, 453, 40);
如果后面的一个点坐标没有提供,不会出错,但结果不一定正确,只能设点模式为stroke.dotted
时,相当于画一个点,而其它的,则会跑到y轴上。
画折线 drawPolyLine(xpoints, ypoints);
示例:
var xpoints = new Array(10, 85, 93, 60);
var ypoints = new Array(50, 10, 105, 87);
jg.drawPolyLine(xpoints, ypoints);
如果x坐标与y坐标数量不匹配,不会出错,但不匹配的点画不出线,只画出杂乱的点。
画框 drawRect(x, y, width, height);
示例:
jg.drawRect(20, 50, 70, 140);
实际宽度是width+pixel,而不是width+2*pixel。中间空白的宽度是width-pixel。顶点不管线宽
,总是(x, y)。
后面宽度与高度缺少,画出几个杂乱的点。
填充区域 fillRect(x, y, width, height);
示例:
jg.fillRect(20, 50, 453, 40);
与drawrect不同,实际宽度就是width。
以下画出两种颜色的框,中间还带一像素的背景色。
jg.setStroke(3);
jg.drawRect(20, 50, 70, 140);
jg.setColor("blue");
jg.fillRect(24, 54, 65, 135);
画任意多边形(封闭折线) drawPolygon(xpoints, ypoints);
示例:
var xpoints = new Array(10, 85, 93, 20);
var ypoints = new Array(50, 10, 105, 87);
jg.drawPolygon(xpoints, ypoints);
如果参数中最后一个点不匹配,则画出折线,而不封闭。
填充任意多边形 fillPolygon(xpoints, ypoints);
示例:
jg.fillPolygon(new array(20, 85, 93, 40), new array(50, 50, 15, 87));
不错,这都能正确地填充好。
画椭圆 drawEllipse(x, y, width, height);
示例:
jg.drawEllipse(20, 50, 70, 140);
或
jg.drawOval(20, 50, 70, 140);
要画圆,则是宽与高一样就行。
填充椭圆 fillEllipse(x, y, width, height);
示例:
jg.fillEllipse(20, 50, 71, 141);
或
jg.fillOval(20, 50, 71, 141);
画弧 fillArc(x, y, width, height, start-angle, end-angle);
示例:
jg.fillArc(20, 20, 41, 12, 270.0, 220.0);
总是从前面的角度顺时针转到后面的角度,即使前面的角度大于后面的角度
设置字体 setFont("font-family", "size+unit", style);
输出文字
drawString("text", x, y);
示例:
jg.setFont("arial", "15px", Font.ITALIC_BOLD);
jg.drawString("some text", 20, 50);
字体样式有以下几种值:plain、bold、italic、italic_bold、bold_italic
固定区域输出文字 drawStringRect("text", x, y, width, alignment);
示例:
jg.setFont("verdana", "11px", font.bold);
jg.drawStringRect("text", 20, 50, 300, "right");
alignment的内容就是css中text-align的内容:left、right、center、justify
输出图像文件 drawImage("src", x, y, width, height);
示例:
jg.drawImage("dog.jpg", 20, 50, 100, 150);
如果有宽度与高度,就会把图像拉长或压缩,如果没有,则显示图像的原大。
画的结果显示出来 paint();
示例:
jg.paint();
以上的画图代码,直到这个语句时才显示出来。
清除画板 clear();
示例:
jg.clear();
设为可打印的 setprintable(true);
示例:
jg.setprintable(true);
如果没有设置可打印,则画出来的图像打印不出来。设为true后,paint出来的图才能打印出来。
如果设为false,则这部分paint的就不能打印了。而文字与图像不管如何设置,都可以打印出来
。
示例的html文件
<html>
<head>
<title>test</title>
<script language="javascript" src="wz_jsgraphics.js" type="text/javascript"></script>
</head>
<body>
<input id="butdraw" value="draw" type="button" onclick="butdraw_click();" />
<div id="test" style="color:blue; left: 0px; overflow: visible; width: 400px; position: relative; top: 0px; height: 250px;background:#eeeeee; "></div>
<script type="text/javascript">
var jg=new jsGraphics("test");
function butdraw_click()
{
if (window.event) event.cancelbubble = true;
jg.setColor("#ff00ff");
jg.setStroke(1);
jg.setPrintable(false);
jg.drawLine(10, 10, 100, 100);
var xpoints = new Array(10, 85, 93, 60);
var ypoints = new Array(50, 10, 105, 87);
jg.drawPolyLine(xpoints, ypoints);
jg.setStroke(3);
jg.drawRect(20, 50, 70, 140);
jg.setColor("blue");
jg.fillRect(24, 54, 65, 135);
var xpoints = new Array(10, 85, 33, 20);
var ypoints = new Array(50, 30, 105, 87);
jg.drawPolygon(xpoints, ypoints);
jg.fillPolygon(new Array(20, 85, 93, 40), new Array(50, 50, 15, 87));
jg.drawEllipse(20, 50, 70, 140);
jg.drawOval(20, 50, 70, 70);
jg.fillEllipse(20, 50, 71, 141);
jg.fillOval(20, 50, 71, 141);
jg.fillArc(20, 20, 40, 40, 220.0, 270.0);
jg.setFont("arial","15px",Font.ITALIC_BOLD);
jg.setFont("arial", "15px", Font.PLAIN);
jg.drawString("some text", 20, 50);
jg.drawRect(20, 50, 300, 140);
jg.setFont("verdana", "11px", Font.BOLD);
jg.drawStringRect("text", 20, 50, 300, "right");
jg.drawImage("but04.gif", 20, 50);
jg.paint();
//jg.clear();
}
</script>
</body>
</html>