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

脚本
*************
* 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
}

(0)

相关推荐

  • 探索angularjs+requirejs全面实现按需加载的套路

    在进行有一定规模的项目时,通常希望实现以下目标:1.支持复杂的页面逻辑(根据业务规则动态展现内容,例如:权限,数据状态等):2.坚持前后端分离的基本原则(不分离的时候,可以在后端用模版引擎直接生成好页面):3.页面加载时间短(业务逻辑复杂就需要引用第三方的库,但很可能加载的库和用户本次操作没关系):4,还要代码好维护(加入新的逻辑时,影响的文件尽量少). 想同时实现这些目标,就必须有一套按需加载的机制,页面上展现的内容和所有需要依赖的文件,都可以根据业务逻辑需要按需加载.最近都是基于angula

  • 一篇文章掌握RequireJS常用知识

    本文采取循序渐进的方式,从理论到实践,从RequireJS官方API文档中,总结出在使用RequireJS过程中最常用的一些用法,并对文档中不够清晰具体的内容,加以例证和分析,分享给大家供大家参考,具体内容如下 1. 模块化 相信每个前端开发人员在刚开始接触js编程时,都写过类似下面这样风格的代码: <script type="text/javascript"> var a = 1; var b = 2; var c = a * a + b * b; if(c> 1)

  • 纯JavaScript代码实现移动设备绘图解锁

    移动手机设备上有一个屏幕解锁的应用相信大家都不陌生,在移动设备上,用户可以通过设置锁定图案作为密码对设备用户界面进行锁定,锁定界面如下图所示. 效果图如下所示 JavaScript Code <script> $("#gesturepwd").GesturePasswd({ backgroundColor:"#2980B9", //背景色 color:"#FFFFFF", //主要的控件颜色 roundRadii:50, //大圆点的

  • 用js绘图

    <object id=DirectDraw classid="CLSID:369303C2-D7AC-11D0-89D5-00A0C90833E6" style="positiion:absolute;top:0;left:0;width:320;height:200" > <param name="line0001" value="绘图指令1"> <param name="line00

  • RequireJS简易绘图程序开发

    前言 RequireJS的出现让前端代码模块化变得容易,当前端项目越来越大,代码越来越多的时候,模块化代码让项目结构更清晰,不仅在开发时让我们的思路更清晰,而且后期维护起来也更容易.下面是我学习RequireJS后使用RequireJS开发的一款简易绘图程序,运行在浏览器中如下图所示: 如果你对RequireJS还不是很了解,可以看我的RequireJS学习笔记:http://blog.csdn.net/yubo_725/article/details/52913853 开始 这个简易绘图程序的

  • SeaJS 与 RequireJS 的差异对比

    "历史不是过去,历史正在上演.随着 W3C 等规范.以及浏览器的飞速发展,前端的模块化开发会逐步成为基础设施.一切终究都会成为历史,未来会更好."--引用玉伯原文最后一段话,我个人也非常赞同.既然谈到了"未来",我个人认为:前端 js 模块如果继续发展,其模块格式很可能会成为未来 WEB 一种标准规范,产生多种实现方式.就好比 JSON 格式一样,最终成为标准.被浏览器原生实现. 谁更有能成为未来的异步模块标准?SeaJS 遵循 CMD 规范,RequireJS 遵

  • 用JavaScript绘图 ——JS2D函数集

    /****************** JS2D函数集 ******************* 作者:neweroica 2003-3-28 CopyRight (C) 2003 在引用或转载时请保留此版权信息,谢谢!!! 本函数集可以单独存成一个js文件:"JS2D.js" ***************************************************/ /************* 画点 ************** x,y 点所在的屏幕坐标(像素) col

  • 小心!AngularJS结合RequireJS做文件合并压缩的那些坑

    在项目使用了AngularJS框架,用RequireJS做异步模块加载(AMD),在做文件合并压缩时,遇到了一些坑,有些只是解决了,但不明白原因. 那些坑 1. build.js里面的paths必须跟main.js里面的保持一致. 这个build.js就是r.js使用的配置文件,而main.js就是RequireJS的main文件.在合并压缩时候,build.js文件里面也需要写paths,而且还是跟main.js一样,我很奇怪为什么就不能识别main里面的require.config的path

  • JavaScript 绘图代码

    JavaScript绘图 IE4 = ! (navigator.appVersion.charAt(0) ') } function Plot(x,y) { outPlot(x,y,1,1) if(Ox>=0 || Oy>=0) { ShowLine(Ox,Oy,x-Ox,y-Oy) } Ox = x Oy = y } function ShowLine(x,y,w,h) { if(w0) return 1 if(ndy) { temp = dx dx = dy dy = temp key =

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

    脚本************** 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

  • angular.js + require.js构建模块化单页面应用的方法步骤

    前言 本文主要给大家介绍的是关于利用angular.js + require.js构建模块化单页面应用的方法,分享出来供大家参考学习,需要的朋友们下面来一起看看详细的介绍吧. AngularJS描述: angularjs是可以用来构建WEB应用的,WEB应用中的一种端对端的完整解决方案.通过开发者呈现一个更高层次的抽象来简化应用的开发.最适合的就是用它来构建一个CRUD应用,它提供了非常方便的且统一高效的解决方案,其数据绑定.基本模版标识符.表单验证.路由.深度链接.组件重用.依赖注入.以及HT

  • 第二次聊一聊JS require.js模块化工具的基础知识

    前一篇:JS模块化工具我们以非常简单的方式引入了requirejs:http://www.jb51.net/article/82527.htm,这一篇将讲述一下requirejs中的一些基本知识,包括API使用方式等 基本API require会定义三个变量:define,require,requirejs,其中require === requirejs,一般使用require更简短 define 从名字就可以看出这个api是用来定义一个模块 require 加载依赖模块,并执行加载完后的回调函

  • 利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)

    前言 这篇文章实现的博客系统使用 Vue 做前端框架,Node + express 做后端,数据库使用的是 MongoDB.实现了用户注册.用户登录.博客管理(文章的修改和删除).文章编辑(Markdown).标签分类等功能. 前端模仿的是 hexo 的经典主题 NexT,本来是想把源码直接拿过来用的,后来发现还不如自己写来得快,就全部自己动手实现成 vue components. 实现的功能 1.文章的编辑,修改,删除 2.支持使用 Markdown 编辑与实时预览 3.支持代码高亮 4.给文

  • angular.js+node.js实现下载图片处理详解

    前言 本文主要介绍的是angular.js+node.js实现下载图片处理,下载有两种方式,下面话不多说,来看看详细的介绍吧. 第一种: 不指定完整路径,然后发送get给server让server自己去拼接路径,然后用express的res.download来做下载: Express: var filePath = path.join(savePath, file[0].name); console.log('Download file: ' + filePath); res.download(

  • Node.js实现JS文件合并小工具

    临近春节,项目结束了,没事情做,于是就想学学node.js,之前写了一个是为了实验室项目的需要,用c#写了个js代码压缩合并的小插件,后来想到可以用node重构,于是就练练手吧,下面小编直接给大家上代码了. 代码如下所示: /*符合CommonJs规范*/ var writePath = 'min.js',/*默认输出到本目录min.js文件里*/ fs = require('fs'), r1 = /^(.+)$/mg,/*分行*/ r2 = /\s{2,}/g,/*去空格*/ r3 = /([

  • JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码

    1.首先写一个遮罩层div,然后再写一个弹窗的div <!-- 遮罩层 --> <div id="cover" style="background: #000; position: absolute; left: 0px; top: 0px; width: 100%; filter: alpha(opacity=30); opacity: 0.3; display: none; z-index: 2 "> </div> <!

  • Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验

    vee-validate 是为 Vue.js 量身打造的表单校验框架,允许您校验输入的内容并显示对应的错误提示信息.它内置了很多常见的校验规则,可以组合使用多种校验规则,大部分场景只需要配置就能实现开箱即用,还支持自定义正则表达式.而且支持 40 多种语言,对本地化.多语言支持非常友好. 国内饿了么团队开源项目 Element UI 就用到了 vee-validate . vee-validate 官网:https://baianat.github.io/vee-validate/ 1. 安装

  • 基于d3.js/neovis.js/neod3.js实现链接neo4j图形数据库的图像化显示功能

    目录 一.使用d3.js 二. neo4jd3.js 三.neovis.js 一.基于D3.js (自由度高,写起来麻烦)二.基于neovis.js (基于d3库,简洁,但样式固定,自由度低.)三.基于neo4jd3.js (融合neovis与d3,数据格式可用d3\neo4j的,或根据需求自己重写方法) https://github.com/eisman/neo4jd3 Svg 不推荐在HTML4和XHTML中使用(但在HTML5允许) 一.使用d3.js 效果: 1.引入官方js 定义背景/

  • 利用Math.js解决JS计算小数精度丢失问题

    目录 缘由 问题的原因 最通俗的解释 解决方案 - Math.js 安装 封装 使用 附:math.js 大数功能 总结 缘由 最近在做公司的一个点餐H5项目需要前端动态计算用户选的商品的总价(单价*数量)和购物车的总价格时发现关于 JavaScript 浮点数计算精度不准确问题.在控制台输入0.1+0.2也能发现此问题. // 加法 0.1 + 0.2 = 0.30000000000000004 0.7 + 0.1 = 0.7999999999999999 0.2 + 0.4 = 0.6000

随机推荐