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


Posted in PHP onOctober 09, 2006

脚本
*************
* 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<canvas.selectNodes("/*//*").length;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<tools.selectNodes("*/toolbar").length;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<m;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<Element.childNodes.length;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<n;i++)
      buffer += ' ' + Element.attributes(i).name + '=\"' + Element.attributes(i).value + '"';
  }
  buffer += debug ? ">" : ">";
  return buffer;
}

// 遍历xml对象--节点结束
function endElement(Element,debug) {
  return (debug ? "</" : "</") + Element.nodeName + (debug ? "><br>" : ">");
}

// 遍历xml对象--节点数据
function onData(Element) {
  return Element.nodeValue
}

PHP 相关文章推荐
wiki-shan写的php在线加密的解密程序
Sep 07 PHP
PHP类中Static方法效率测试代码
Oct 17 PHP
php随机输出名人名言的代码
Oct 07 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
PHP中构造函数和析构函数解析
Oct 10 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
隐性调用php程序的方法
Jun 13 PHP
两种php实现图片上传的方法
Jan 22 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
PHP程序员学习使用Swoole的理由
Jun 24 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
example1.php
Oct 09 #PHP
一个ftp类(ini.php)
Oct 09 #PHP
php中数据的批量导入(csv文件)
Oct 09 #PHP
第四节 构造函数和析构函数 [4]
Oct 09 #PHP
PHP5 安装方法
Oct 09 #PHP
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 #PHP
第二节 对象模型 [2]
Oct 09 #PHP
You might like
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
扩展String功能方法
2006/09/22 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
2017/12/18 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
JS实现轮播图效果
2020/01/11 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
Python中splitlines()方法的使用简介
2015/05/20 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
Python实现的堆排序算法示例
2018/04/29 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python何时应该使用Lambda函数
2019/07/02 Python
通过代码实例了解Python异常本质
2020/09/16 Python
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
static函数与普通函数有什么区别
2015/12/25 面试题
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
四川成都导游欢迎词
2014/01/18 职场文书
体育教学随笔感言
2014/02/24 职场文书
医院党员公开承诺书
2014/08/30 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
针对吵架老公保证书
2015/05/08 职场文书
Python进行区间取值案例讲解
2021/08/02 Python
总结高并发下Nginx性能如何优化
2021/11/01 Servers