- 浏览: 546729 次
- 性别:
- 来自: 中华大丈夫学院
文章分类
最新评论
-
lxmin0702:
你好,我刚下载了您的附件,但是发现里面并没有正文所提到的Lis ...
SWT中ole/activex实践--操作word的一个例子 -
kkkwoai:
我想请教下 我有个要求是实现ppt解析为图片,用的是jac ...
Office 开发: 现实生活中的 OBA 解决方案模式 -
pengshan:
However, the mutability of the ...
【翻译】Spring Integration参考手册-第二章 -
kms1989:
导出pdf中文乱码怎么搞?
jsPDF介绍与兼容IE的补丁 -
kms1989:
你好,请问不支持中文怎么解决?
jsPDF介绍与兼容IE的补丁
Ext扩展组件介绍之一--Ext.Drawing.Surface绘图组件(vml/svg)
Kimm King
2009年2月27日0:53:15
作为一个Ext JS的fans,我一直为Ext JS的UI为傲。
但是Ext JS的类库中并未提供关于Graphics的部分,不得不说的是一种遗憾。
可能是目前各个浏览器上并没有统一的相关实现,目前比较好的解决方法有两个:
一个是使用其他的、二进制的RIA工具来做绘图的容器比如(flash,silverlight)。另一个就是使用vml(IE only)、svg(general)。
今天在extjs官方论坛的扩展和自定义组件板块搜了下“graphic”,找到了一个组件Ext.Drawing.Surface。
作者是:nouveauc ,来自西非最富裕的国家——科特迪瓦。
组件比较简单,继承一个Box,根据浏览器判断使用vml还是svg,
定义了绘制和填充(矩形、圆、椭圆)等常见组件
~~~~~~~~~~~几个效果图的代码在附件中。~~~~~~~~~~~~~~
(详见:http://extjs.com/forum/showthread.php?t=50609)
在线例子:http://www.jadacosta.es/extjs/examples/drawing&charting/linechart.html
组件代码:
Ext.namespace("Ext.Drawing"); Ext.Drawing.version='version 0.0.1'; Ext.Drawing.vmlGraphic=function(s){ this.surface=s; var i=Ext.id(); this.svgid=i+'vml'; } Ext.Drawing.vmlGraphic.prototype.createRect=function(config){ var r =document.createElement("v:rect"); r.style.top=config.y; r.style.left=config.x; r.style.width=config.width; r.style.height=config.height; if(!Ext.isEmpty(config.fill)) { var d=this.createfill(config.fill); r.fill=d; } return new Ext.Element(r); } Ext.Drawing.vmlGraphic.prototype.createEllipse=function(config){ var r=document.createElement("v:oval"); r.style.top=config.cy-config.ry/2; r.style.left=config.cx-config.rx/2; r.style.width=config.rx; r.style.height=config.ry; if(!Ext.isEmpty(config.fill)) { r.fill=this.createfill(config.fill); } return new Ext.Element(r); } Ext.Drawing.vmlGraphic.prototype.createCircle=function(config){ var r=document.createElement("v:oval"); r.style.top=config.cy-config.r/2; r.style.left=config.cx-config.r/2; r.style.width=config.r; r.style.height=config.r; if(!Ext.isEmpty(config.fill)) { r.fill=this.createfill(config.fill); } return new Ext.Element(r); } Ext.Drawing.vmlGraphic.prototype.createfill=function(config) { var f = document.createElement("v:fill"); f.on=true; if(typeof config == "string"){ f.color=config; f.type="solid"; } else { if(!Ext.isEmpty(config.url)) return "url(#"+config.url+")"; else { if(config.type == "color" || !Ext.isEmpty(config.color)){ f.color=config.color; f.type="solid"; } else if(config.type == "linear"){ var stops=""; Ext.each(config.stops,function(it,ind,ar){ stops+=it.offset*100+"% "+it.color+"," }); f.colors=stops; f.type="gradient"; } else if(config.type == "radial"){ var stops=""; Ext.each(config.stops,function(it,ind,ar){ stops+=it.offset*100+"% "+it.color+"," }); f.colors=stops; f.type="gradientradial"; } } } return f; } Ext.Drawing.vmlGraphic.prototype.createRender=function(e) { if (!document.namespaces['vml']){ document.namespaces.add('vml', 'urn:schemas-microsoft-com:vml'); //var styleSheet = (document.styleSheets.length > 0) ? document.styleSheets[0] : document.createStyleSheet(); var styleSheet =document.createStyleSheet(); styleSheet.addRule('v\:* {behavior:url(#default#VML);}'); } return e; } Ext.Drawing.svgGraphic=function(s){ this.surface=s; var i=Ext.id(); this.svgid=i+'svg'; } Ext.Drawing.svgGraphic.prototype.createRect=function(config){ var r =document.createElementNS("http://www.w3.org/2000/svg","rect"); r.setAttribute("x",config.x); r.setAttribute("y",config.y); r.setAttribute("width",config.width); r.setAttribute("height",config.height); if(!Ext.isEmpty(config.fill)) { r.setAttribute("fill",this.createfill(config.fill)); } return new Ext.Element(r); } Ext.Drawing.svgGraphic.prototype.createEllipse=function(config){ var r=document.createElementNS("http://www.w3.org/2000/svg","ellipse"); r.setAttribute("cx",config.cx); r.setAttribute("cy",config.cy); r.setAttribute("rx",config.rx); r.setAttribute("ry",config.ry); if(!Ext.isEmpty(config.fill)) { r.setAttribute("fill",this.createfill(config.fill)); } return new Ext.Element(r); } Ext.Drawing.svgGraphic.prototype.createCircle=function(config){ var r=document.createElementNS("http://www.w3.org/2000/svg","circle"); r.setAttribute("cx",config.cx); r.setAttribute("cy",config.cy); r.setAttribute("r",config.r); if(!Ext.isEmpty(config.fill)) { r.setAttribute("fill",this.createfill(config.fill)); } return new Ext.Element(r); } Ext.Drawing.svgGraphic.prototype.createfill=function(config) { if(typeof config == "string") return config; else { if(!Ext.isEmpty(config.url)) return "url(#"+config.url+")"; else { if(config.type == "color" || !Ext.isEmpty(config.color)) return config.color; else if(config.type == "linear"){ var grad=document.createElementNS("http://www.w3.org/2000/svg","linearGradient"); if(Ext.isEmpty()) grad.id=Ext.id(); else grad.id=config.id; if(!Ext.isEmpty(config.x1)) grad.setAttribute("x1",config.x1); if(!Ext.isEmpty(config.x1)) grad.setAttribute("y1",config.y1); if(!Ext.isEmpty(config.x1)) grad.setAttribute("x2",config.x2); if(!Ext.isEmpty(config.x1)) grad.setAttribute("y2",config.y2); Ext.each(config.stops,function(it,ind,ar){ var st=document.createElementNS("http://www.w3.org/2000/svg","stop"); st.setAttribute("offset",it.offset); st.setAttribute("style","stop-color:"+it.color); grad.appendChild(st); }); this.surface.defs.appendChild(grad); return "url(#"+grad.id+")"; } else if(config.type == "radial"){ var grad=document.createElementNS("http://www.w3.org/2000/svg","radialGradient"); if(Ext.isEmpty()) grad.id=Ext.id(); else grad.id=config.id; grad.setAttribute("cx",config.cx); grad.setAttribute("cy",config.cy); grad.setAttribute("fx",config.fx); grad.setAttribute("fy",config.fy); grad.setAttribute("r",config.r); Ext.each(config.stops,function(it,ind,ar){ var st=document.createElementNS("http://www.w3.org/2000/svg","stop"); st.setAttribute("offset",it.offset); st.setAttribute("style","stop-color:"+it.color); grad.appendChild(st); }); this.surface.defs.appendChild(grad); return "url(#"+grad.id+")"; } } } } Ext.Drawing.svgGraphic.prototype.createRender=function(e) { var el=document.createElementNS("http://www.w3.org/2000/svg","svg"); el.setAttribute("width",this.surface.width+"px"); el.setAttribute("height",this.surface.height+"px"); e.insertFirst(el); var def=document.createElementNS("http://www.w3.org/2000/svg","defs"); el.appendChild(def); this.surface.defs=def; return el; } Ext.Drawing.Surface=Ext.extend(Ext.BoxComponent,{ initComponent : function(){ Ext.Drawing.Surface.superclass.initComponent.call(this); if(Ext.isIE) this.graphic=new Ext.Drawing.vmlGraphic(this); else this.graphic=new Ext.Drawing.svgGraphic(this); }, onRender : function(ct, position){ Ext.Drawing.Surface.superclass.onRender.call(this, ct, position); this.el=Ext.get(this.renderTo); this.render=this.graphic.createRender(this.el); if(!this.width){ var sz = this.el.getSize(); this.setSize(sz.width, this.height || sz.height); } }, // private onDestroy : function(){ } }); Ext.reg('surface', Ext.Drawing.Surface);
test:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>XTech SVG Demo</title> <link href="../sivom/ext/resources/css/ext-all.css" rel="stylesheet" type="text/css" /> <script language="javascript" src="../sivom/ext/adapter/ext/ext-base.js"></script> <script language="javascript" src="../sivom/ext/ext-all.js"></script> <script language="javascript" src="../drawing/Graphic.js"></script> <script language="javascript"> Ext.onReady(function(){ var sur=new Ext.Drawing.Surface( { width:600, height:600, renderTo:'essdiv' } ); var m= sur.graphic.createRect({ x:20, y:30, width:200, height:300, fill:{ type:"linear", stops:[{offset:"0",color:"#FFFF00"},{offset:"0.75",color:"#0000FF"},{offset:"1",color:"#F0F0FF"}] } }); var r=sur.graphic.createCircle({ cx:100, cy:50, r:100, fill:"red" }); sur.render.appendChild(m.dom); sur.render.appendChild(r.dom); }); </script> </head> <body id="body" style="border: 1px solid black; position: absolute; z-index: 0; left: 5%; top: 5%; width: 90%; height: 90%;"> <div id="essdiv"></div> </body> </html>
- drawing.zip (8.1 KB)
- 下载次数: 439
- draw_and_chart.zip (15.3 KB)
- 下载次数: 360
- drawing_and_charting.zip (109.8 KB)
- 下载次数: 523
评论
6 楼
kimmking
2009-03-16
onlydo 写道
我要用它画个带箭头的线都画不出来。代码还很不成熟,看看就好,根本没办法用。
急需要带箭头的线吗?
我倒是可以给你加个,不过还有其他的需要的话,你还是自己看看vml svg自己下吧~~
5 楼
onlydo
2009-03-16
我要用它画个带箭头的线都画不出来。代码还很不成熟,看看就好,根本没办法用。
4 楼
kimmking
2009-03-15
onlydo 写道
好个鬼。啥都没实现。
实现了使用vml还是svg,绘制和填充(矩形、圆、椭圆)等常见组件
3 楼
onlydo
2009-03-15
好个鬼。啥都没实现。
2 楼
musing
2009-03-13
很好,可惜不能托动,要不然就可以画流程图了
1 楼
dotaking
2009-02-27
js 绘图的好东西,
考虑实现一个~!·~
考虑实现一个~!·~
发表评论
-
excelpanel之二-实现简单数据库表的展示与回填
2010-08-26 00:40 3323最近应一个朋友的的要 ... -
excelpanel--extjs中嵌入excel,并封装简单操作
2010-01-08 16:01 5247ExcelPanel Kimmking kimmking@ ... -
Ext.grid.EditorGridPanel的一个小问题
2009-12-10 23:05 2978当一个页面有多个结构 ... -
Ext扩展组件介绍之二--Ext.ux.form.LovCombo多选下拉框
2009-03-01 04:47 10957Ext扩展组件介绍之二--Ext.ux.form.Lov ... -
偶的ExtJS讲座之基础教程PDF版~
2009-02-28 12:48 3096偶的ExtJS讲座之基础教程PDF版~ KimmKing 20 ... -
什么样的Element可以mask?
2008-08-02 03:18 2100mask的效果就是指 在现有的UI组件上蒙上一层(一般是半透明 ... -
下拉多选的树(Ext.ux.ComboBoxCheckTree)
2008-08-02 01:06 5058略微的整合了xiexueze 同学的 多选树Ext.tree ... -
Ext中使用Word
2008-07-27 20:06 3962Ext中使用Word -
GridPanel to real Excel file(IE5+,Windows,Office)
2008-07-25 03:29 12080GridPanel to real Excel file(On ... -
解决Ext对于复杂项目加载慢的一个思路
2008-07-23 21:21 5169本人新手,以下仅仅是个人观点: OPOJ方式下使用Ext,由 ...
相关推荐
VML中文手册 - www_infowe_com.htm java
在1.6.1版本中,GFX支持SVG和VML两种渲染方式,兼容不同浏览器。 7. **Dojo Effects 和 Animations**: Dojo 提供了一套强大的效果和动画库,包括简单的淡入淡出、复杂的路径动画等。 8. **Dojo Loader**: 作为AMD...
1.4 ext js的开发工具的获取、安装与配置介绍 / 18 1.4.1 ext designer / 18 1.4.2 在visual studio中实现智能提示 / 23 1.4.3 spket / 28 1.4.4 在eclipse中实现智能提示 / 32 1.5 如何获得帮助 / 32 1.6 本...
根据提供的文件信息“内容电商2.0研究报告-VML-胖鲸智库-201809.pdf”,我们可以推测这份报告主要探讨的是2018年时的内容电商领域的发展状况、趋势以及策略建议等内容。虽然提供的具体内容仅有“reload”一词,无法...
ECharts基于SVG、VML或Canvas技术,能够处理大规模数据,支持自定义事件和深度交互。 在"react-antd-echarts-master.zip"项目中,开发者会看到如何将React的组件化思想与Ant Design的UI组件结合,创建出具有美观...
以前发布过一个asp+vml曲线图代码,现在看到一个js+vml曲线图代码 <HTML xmlns:v="urn:schemas-microsoft-com:vml"xmlns:o="urn:schemas-microsoft-com:office:office"> <meta http-equiv="Content-Type" content=...
svg-to-vml-with-trifleJS $ bin\triflejs.exe convert.js example --emulate=IE8 或者$ npm install && grunt
一个方便和易于使用的图形化编辑器业务流程图,符合OMG规范(BPMN 2.0的)。遥墙BPMN编辑器是在Java编程语言编写,并可以帮助你创建你在任何时候需要在所有的图表。 特点: 无需安装 快速轻松地创建,查看,编辑和...
在处理VML和SVG时,我们可以创建一个类工厂,根据用户代理或浏览器类型来决定实例化哪种类型的图形对象——VML对象或SVG对象。这样,我们可以在不关心具体实现细节的情况下,确保在各种浏览器中都能正确地呈现矢量...
要将基于 EXT 和 VML 的流程图扩展到支持更多浏览器,开发者需要考虑使用替代方案,如 SVG(Scalable Vector Graphics)。SVG 是一个更现代的矢量图形标准,它被所有现代浏览器广泛支持。将 VML 替换为 SVG 可以提高...
sudo ./install ``` #### 配置环境变量 成功安装后,还需要设置环境变量以确保能够正确运行NS2.34。 1. **添加路径到 `$PATH`**: - 对于 `sh` 类型的shell: ```bash export PATH=$PATH:/home/duyaojun/ns-...
OpenLayers通过读取这些点数据,利用SVG或者VML(对于不支持SVG的旧版浏览器)进行渲染,形成连贯的轨迹线。此外,还可以通过控制点的样式,如颜色、线宽、箭头等,来突出显示不同阶段的速度或方向。 在`map.html`...
VML,全称为Vector Markup Language,是一种用于在网页上描绘矢量图形的XML语言。它在HTML中提供了创建和展示矢量图形的能力,特别是在那些不支持SVG(Scalable Vector Graphics)或者JavaScript Canvas的老旧浏览器...
组件用Java编写生成所有 javascript (v1.4) 的Google Web Toolkit RDF 数据库(Jena v2.5.5) Dojo在所有浏览器中绘制 SVG/VML 线 (v1.0.2)概念http://gwt.org.ua/odbui/manual/fluxb_layout.html 现场演示...
SVG、CANVAS、VML是三种用于在Web上创建矢量图形的方法,它们各有优缺点,适应不同的场景需求。 SVG(Scalable Vector Graphics)是一种基于XML的开放标准,被广泛支持,尤其在现代浏览器中,如Firefox和Opera。在...
标题"vml.rar_VML_VML web_js v_js vml gis_web绘图"表明这是一个关于使用VML进行Web绘图的资源包,特别是与JavaScript(js)集成,用于GIS(Geographic Information System,地理信息系统)的应用。这可能包含一个...
SVG装换为VML的Javascript
VML,全称Vector Markup Language,是一种用于在网页上呈现矢量图形的技术,它允许开发者创建出清晰、可缩放的图形,尤其在IE浏览器中,因为SVG(Scalable Vector Graphics)在旧版本的IE中不被支持,VML成为了替代...
2. **路径绘制**:通过定义一系列的坐标点,VML可以创建复杂的曲线和路径,使得用户能够在画图板上自由绘图。 3. **事件处理**:通过JavaScript,可以为VML图形添加鼠标事件监听器,实现点击、拖动等交互功能,使得...