欢迎来到福编程网,本站提供各种互联网专业知识!

VML绘图板②脚本--VMLgraph.js、XMLtool.js

发布时间:2006-10-09 作者: 来源:转载
脚本**************VMLgraph.js*************varxo=0;varyo=0;varox=80;varoy=20;vardx=0;vardy=0;vardrawKey=false;varitemID=0;varShapeItemNum=0;varShapeItemX=0;varShapeItemY=0;varCurveItemNum=0;varNodeDelete=false;varToolBarNum=2;//预置的工具编

脚本

*************

* VMLgraph.js

*************

var xo=0;

var yo=0;

var ox=80;

var oy=20;

var dx=0;

var dy=0;

var drawKey = false;

var itemID = 0;

var ShapeItemNum = 0;

var ShapeItemX = 0;

var ShapeItemY = 0;

var CurveItemNum = 0;

var NodeDelete = false;

var ToolBarNum = 2; // 预置的工具编号

var gradientX = -1;

function cursor(k) {

xo = event.clientX - ox;

yo = event.clientY - oy;

if(k && xo>=0 && yo>=0)

oxy.innerHTML = xo+","+yo;

else

oxy.innerHTML = "";

if(drawKey) {

paint();

view.innerHTML = tree(canvas.documentElement,0);

}

}

function setOverColor(v) {

if(! NodeDelete) return;

v.myColor = v.strokecolor;

if(v.strokecolor == "red")

v.strokecolor='#000000';

else

v.strokecolor='#ff0000';

}

function setOutColor(v) {

if(! NodeDelete) return;

v.strokecolor = v.myColor;

view.innerHTML = tree(canvas.documentElement,0);

}

function deleteNode(v) {

if(! NodeDelete) return;

var id = v.id;

for(i=0;i

var node = canvas.selectNodes("/*//*")[i];

if(node.getAttribute("id") == id) {

canvas.documentElement.childNodes[0].removeChild(node);

view.innerHTML = tree(canvas.documentElement,0);

return;

}

}

}

function setElement(node) {

node.setAttribute("id") = itemID;

node.setAttribute("myColor") = "#";

node.setAttribute("onMouseOver") = "setOverColor(this)";

node.setAttribute("onMouseOut") = "setOutColor(this)";

node.setAttribute("onClick") = "deleteNode(this)";

var subobjField = canvas.createElement("v:stroke");

subobjField.setAttribute("color") = color1.fillcolor;

subobjField.setAttribute("dashstyle") = dashstyle.dashstyle;

node.appendChild(subobjField);

if(textbox.style.visibility == "visible" && txt.value.length) {

var subobjField = canvas.createElement("v:path");

subobjField.setAttribute("textpathok") = "true";

node.appendChild(subobjField);

var subobjField = canvas.createElement("v:textpath");

subobjField.setAttribute("on") = "true";

subobjField.setAttribute("string") = txt.value;

subobjField.setAttribute("style") = "font:normal normal normal 16pt 'Arial Black'";

node.appendChild(subobjField);

}

canvas.documentElement.childNodes[0].appendChild(node);

}

function mouse_down() {

drawKey = true;

dx = xo;

dy = yo;

itemID++;

if(ToolBarNum != 7) ShapeItemNum = 0;

switch(ToolBarNum) {

case 3:

var objField = canvas.createElement("v:line");

objField.setAttribute("from") = xo+","+yo;

objField.setAttribute("to") = xo+","+yo;

return setElement(objField);

case 4:

if(CurveItemNum == 0) {

CurveItemNum = 1;

var objField = canvas.createElement("v:curve");

objField.setAttribute("from") = xo+","+yo;

objField.setAttribute("to") = xo+","+yo;

objField.setAttribute("control1") = xo+","+yo;

objField.setAttribute("control2") = xo+","+yo;

var subobjField = canvas.createElement("v:fill");

subobjField.setAttribute("opacity") = 0;

objField.appendChild(subobjField);

return setElement(objField);

}

return;

case 9:

var objField = canvas.createElement("v:polyline");

objField.setAttribute("points") = xo+","+yo+" "+xo+","+yo;

var subobjField = canvas.createElement("v:fill");

subobjField.setAttribute("opacity") = 0;

objField.appendChild(subobjField);

return setElement(objField);

case 7:

if(ShapeItemNum == 0) {

var objField = canvas.createElement("v:shape");

objField.setAttribute("style") = "width:500; height:309";

objField.setAttribute("path") = "m "+xo+","+yo+" l "+xo+","+yo;

ShapeItemX = xo;

ShapeItemY = yo;

}else {

objField = canvas.documentElement.childNodes[0].lastChild;

objField.setAttribute("path") = objField.getAttribute("path") + " "+xo+","+yo;

return;

}

ShapeItemNum++;

break;

case 5:

var objField = canvas.createElement("v:rect");

break;

case 6:

var objField = canvas.createElement("v:roundrect");

objField.setAttribute("arcsize") = 0.2;

break;

case 8:

var objField = canvas.createElement("v:oval");

break;

case 10:

s = "";

s = tree(canvas.documentElement,1);

view.innerHTML = s;

return;

defaule:

drawKey = false;

return;

}

if(objField) {

if(ToolBarNum != 7)

objField.setAttribute("style") = "left:"+xo+"; top:"+yo+"; width:0; height:0;";

var subobjField = canvas.createElement("v:fill");

subobjField.setAttribute("opacity") = gradientBar.opacity;

subobjField.setAttribute("angle") = gradientBar.angle;

subobjField.setAttribute("type") = gradientBar.type;

subobjField.setAttribute("color") = gradientBar.color.value;

subobjField.setAttribute("color2") = gradientBar.color2.value;

subobjField.setAttribute("colors") = gradientBar.colors.value;

subobjField.setAttribute("focusposition") = gradientBar.focusposition;

objField.appendChild(subobjField);

return setElement(objField);

}

return;

}

function mouse_up() {

drawKey = false;

if(CurveItemNum > 0) CurveItemNum++;

if(CurveItemNum > 3) CurveItemNum = 0;

if(ToolBarNum == 7) {

if(Math.abs(xo - ShapeItemX) < 2 && Math.abs(yo - ShapeItemY) < 2) {

ShapeItemNum = 0;

Element = canvas.documentElement.childNodes[0].lastChild;

var regerp = / [0-9]+,[0-9]+$/

var str = Element.getAttribute("path");

Element.setAttribute("path") = str.replace(regerp," x e");

view.innerHTML = tree(canvas.documentElement,0);

}

}

}

function paint() {

Element = canvas.documentElement.childNodes[0].lastChild;

var x0,y0,x1,y1;

x0 = Math.min(dx,xo);

y0 = Math.min(dy,yo);

x1 = Math.max(dx,xo);

y1 = Math.max(dy,yo);

var box = "left:"+x0+"; top:"+y0+"; width:"+(x1-x0)+"; height:"+(y1-y0)+";";

switch(ToolBarNum) {

case 4:

if(CurveItemNum ==2) {

Element.setAttribute("control1") = xo+","+yo;

Element.setAttribute("control2") = Element.getAttribute("to");

break;

}

if(CurveItemNum ==3) {

Element.setAttribute("control2") = xo+","+yo;

break;

}

case 3:

Element.setAttribute("to") = xo+","+yo;

break;

case 7:

var regerp = /[0-9]+,[0-9]+$/

var str = Element.getAttribute("path");

Element.setAttribute("path") = str.replace(regerp,xo+","+yo);

break;

case 5:

case 6:

case 8:

var regerp = /left.+height:[0-9]+;/

var str = Element.getAttribute("style");

Element.setAttribute("style") = str.replace(regerp,box);

break;

case 9:

var regerp = / [0-9]+,[0-9]+$/

var str = Element.getAttribute("points");

Element.setAttribute("points") = str+" "+xo+","+yo;

break;

defaule:

break;

}

}

function init() {

tool_box_refresh();// 工具栏初始

view.innerHTML = tree(canvas.documentElement);// 绘图区初始

color.innerHTML = tree(tools.selectNodes("*/colorbar")[0]);// 颜色选择初始

linebox.innerHTML = tree(tools.selectNodes("*/linebox")[0]);// 线型选择初始

gradientBox.innerHTML = tree(tools.selectNodes("*/gradient")[0]);// 充填选择初始

}

// 绘制工具栏

function tool_box_refresh() {

var buffer = "";

var i;

for(i=0;i

var node = tools.selectNodes("*/toolbar")[i];

var id = node.getAttribute("id");

node.childNodes[0].setAttribute("onClick") = "tool_box_select("+id+",this.title)";

var node1 = node.selectNodes("*/v:rect")[0];

if(id == ToolBarNum) {

node1.setAttribute("fillcolor") = "#ffcccc"

node1.setAttribute("strokecolor") = "#ff0000"

}else {

node1.setAttribute("fillcolor") = "#ffffff"

node1.setAttribute("strokecolor") = "#000000"

}

buffer += tree(node.childNodes[0]);

}

toolbox.innerHTML = buffer;

}

// 工具选择

function tool_box_select(v,t) {

var key = ToolBarNum;

ToolBarNum = v;

tool_box_refresh();

hooke();

if(v == 7) {

if(key == 7 && ShapeItemNum > 0) {

Element = canvas.documentElement.childNodes[0].lastChild;

var str = Element.getAttribute("path");

Element.setAttribute("path") = str + " x e";

view.innerHTML = tree(canvas.documentElement,0);

ShapeItemNum = 0;

}

}

if(v == 10)

if(textbox.style.visibility == "hidden")

textbox.style.visibility = "visible";

else

textbox.style.visibility = "hidden";

NodeDelete = false;

if(v == 1) {

NodeDelete = true;

view.innerHTML = tree(canvas.documentElement,0);

}

}

// 颜色选择

//var setcolorkey = color1;

function setcolor(c) {

var setcolorkey = color1;

setcolorkey.fillcolor = c;

}

function gradientColor(v) {

v.fillcolor = color1.fillcolor;

gradientRefresh();

return;

var m = tools.documentElement.selectNodes("/*/gradient//v:shape").length;

var node = tools.documentElement.selectNodes("/*/gradient//v:shape");

for(i=0;i

if(node[i].getAttribute("id") == v.id)

node[i].setAttribute("fillcolor") = color1.fillcolor;

}

gradientRefresh();

}

function gradientPoint(v) {

if(gradientX < 0)

gradientX = xo - 508 - parseInt(v.style.left);

n = xo - 508 - gradientX;

if(n < 8) n = 8;

if(n > 108) n = 108;

v.style.left = n;

gradientRefresh();

}

function anglePoint(v) {

angle.style.left = Math.floor((xo-516)/25)*25+8;

gradientRefresh();

}

function opacityPoint(v) {

opacity.style.left = Math.floor((xo-516)/25)*25+8;

gradientRefresh();

}

function settype(v) {

if(v.style.borderColor == "black")

v.style.borderColor = "red";

else

v.style.borderColor = "black";

gradientRefresh();

}

function setGradientX() {

gradientX = -1;

}

function gradientRefresh() {

var m = (parseInt(gradient4.style.left)-parseInt(gradient1.style.left));

var n1 = (parseInt(gradient2.style.left)-parseInt(gradient1.style.left))/m*100;

var n2 = (parseInt(gradient3.style.left)-parseInt(gradient1.style.left))/m*100;

gradientBar.color.value = gradient1.fillcolor;

gradientBar.color2.value = gradient4.fillcolor;

if(type3.style.borderColor == "black")

gradientBar.colors.value = ",";

else

gradientBar.colors.value = n1 + "% " + gradient2.fillcolor + "," + n2 + "% " + gradient3.fillcolor;

if(type1.style.borderColor == "black")

gradientBar.type = "solid";

else

gradientBar.type = "gradient";

if(type2.style.borderColor == "red")

gradientBar.type = "gradientradial";

n1 = (parseInt(focus1.style.left)-8)/m*100;

n2 = (parseInt(focus2.style.left)-8)/m*100;

gradientBar.focusposition.value = n1 + "%," + n2 + "%";

gradientBar.angle = (parseInt(angle.style.left)-8) * 3.6;

gradientBar.opacity = (parseInt(opacity.style.left)-8)/m

}

*************

* XMLtool.js

*************

// 传送XML文档到服务器

function saveXML()

{

var xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");

xmlHTTP.open("POST","server.php",false); // 使用ASP时用server.asp

xmlHTTP.setRequestHeader("Contrn-type","text/xml");

xmlHTTP.setRequestHeader("Contrn-charset","gb2312");

xmlHTTP.send(tree(canvas.documentElement));

var s = xmlHTTP.responseText;

minview.innerHTML = s.replace(/WIDTH:500;HEIGHT:300/,"WIDTH:120;HEIGHT:72")

if(xmlHTTP.responseText.indexOf("Error:")!=-1) {

alert(xmlHTTP.responseText);

}

}

// 遍历xml对象,解析xml的核心函数集

function tree(Element,debug) {

var buffer = "";

var node = "";

if(Element.nodeType != 3) {

node = Element;

buffer += onElement(Element,debug);

}

if(Element.nodeType == 3)

buffer += onData(Element);

if(Element.hasChildNodes) {

for(var i=0;i

buffer += tree(Element.childNodes(i),debug);

}

}

if(node)

buffer += endElement(node,debug);

return buffer;

}

/***** 以下三个函数请根据需要自行修改 *****/

// 遍历xml对象--节点开始

function onElement(Element,debug) {

var buffer = (debug ? "<" : "<") + Element.nodeName;

n = Element.attributes.length

if(n>0) {// 若该节点有参数

for(var i=0;i

buffer += ' ' + Element.attributes(i).name + '="' + Element.attributes(i).value + '"';

}

buffer += debug ? ">" : ">";

return buffer;

}

// 遍历xml对象--节点结束

function endElement(Element,debug) {

return (debug ? "

" : ">");

}

// 遍历xml对象--节点数据

function onData(Element) {

return Element.nodeValue

}

相关推荐