结合GFX,DnD与Dijit创建基于Dojo的Web图形类应用

GFX(dojox.gfx)作为 Dojo 扩展组件之一,封装了底层浏览器中实际的图形引擎,使开发人员具备了 Web 绘图的基本能力,是此类应用的基础。同时,作为 Dojo 核心组件的 DnD(dojo.dnd),则实现了基于浏览器的鼠标拖拽操作,从而为图形组件选择,组件间连线等高级绘图操作提供了技术支持。再者,通过引入自定义 Dojo 小部件(dijit),开发人员可以对已有应用进行合理的扩展,使用户可以通过更为灵活的方式去操作图形。本文首先将对基于浏览器的绘图原理做一介绍,而后以层进的方式向读者展示如何将 GFX,DnD 以及 dijit 进行紧密的结合,在浏览器中完成绘图类应用常见的各种操作,最后将通过一个实际的 Web 绘图应用来让读者对本文所述内容有更进一步的体会。

浏览器绘图的基本原理

基于 HTML 和 JavaScript 的浏览器绘图方式,依赖于各个浏览器内部所提供的图形引擎。但由于不同浏览器所支持的网络图形标准不尽相同,给软件的兼容性造成了很大的困难。Dojo 作为目前流行的 JavaScript 框架之一,虽然在一定程度上为开发人员屏蔽了这些差异,但当遇到某些特殊的绘图需求时,仍显得力不从心,因而也就有必要对浏览器绘图的基本原理有所了解,这样才会写出性能更稳、效率能高的优秀代码。目前几个主流的网络图形标准包括 IE 支持的 VML,Firefox,Safari 和 Opera 支持的 SVG 以及 HTML5 支持的 Canvas。

VML 是微软开发并在 IE 5.0 以上版本提供支持的基于 XML 的一种标记语言,使用 VML 描述的矢量图形,由 shape 和 group 两个基本元素定义,shape 描述了一个矢量图形元素,而 shape 则将这些图形元素集合在一起,从而使其可以作为一个整体被处理。由于使用简单的文本来表示图像,因而 VML 可用很少的字节来表示相对复杂的图像。

SVG 是由 W3C 制定的同样基于 XML 的矢量图形描述语言,SVG 元素是指示如何绘制图像的一些指令,由图形引擎解释这些指令,把 SVG 图像在浏览器上显示出来。使用 SVG 可以在网页上显示出各种各样的高质量的矢量图形,其最明显的特征是灵活的文件格式,矢量图形、位图和文字三部分共同组成一个 SVG 图形,并具备对运行中的 Web 页面图像进行实时修改的能力。

Canvas 是指 HTML 5 中新加入的 canvas 元素,最初由 Apple 的 Safari 浏览器引入,而后受到 Firefox 和 Opera 的广泛支持。Canvas 元素相对 VML 和 SVG 的一个重要不同在于,canvas 提供了通过 JavaScript 绘制图形的方法,每一个 canvas 元素都有一个上下文,在其中可以绘制任意图形;而 SVG 和 VML 都使用 XML 文档来描述图形,开发人员通常通过修改其中的 XML 标记来完成对图像的修改。

明确了不同标准之间的差异,便更体会到 JavaScript 框架给开发人员所带来的便捷,下面这样一段 Dojo 代码,可以在 IE 和 Firefox 下渲染出相同效果的的图形。但透过现象来发

现本质,我们使用 Firebug 不难看出同一图形在不同浏览器背后的不同实现。

var surface = dojox.gfx.createSurface(gTestContainer, 300, 300);
  var line = surface.createLine({ x1: 20, y1: 20, x2: 100, y2: 100 })
  .setFill([255, 0, 0, 0.5]).setStroke({color: "red", width: 5})
  .setTransform({ dx:70, dy: 100 });
  var circle = surface.createCircle({ cx: 170, cy: 200, r: 50 })
  .setFill([0, 255, 0, 0.5]);

图 1 是 IE 下 VML 图形 DOM 结构, Firefox 下 SVG 图形的 DOM 结构则如图 2 所示。所以,应该了解的是,Dojo 所提供的上层绘图 API,是能够根据不同的浏览器选择生成相应标准的绘图元素,这种封装的方式自然也就无法顾及各个绘图标准的独特之处,因而当我们在进行某项较为复杂的绘图操作或者调试一个跨浏览器的代码缺陷时,不妨先确认一下 Dojo 是否很好的兼顾了这个问题,如果没有,那就需要我们针对不同的浏览器编写相应的代码来屏蔽这些差异。

图 1. IE 下 VML 图形的 DOM 结构

时间: 2024-10-01 02:32:46

结合GFX,DnD与Dijit创建基于Dojo的Web图形类应用的相关文章

提高基于Dojo的Web 2.0应用程序的性能

Web 2.0 应用程序最注重的一个方面就是用户体验,用户希望使用的是一个快速稳定的 Web 2.0 应用.而基于 Dojo 的 Web 2.0 应用经常需要下载大量 Dojo 代码到客户端执行,而且会不时的向后台发起 IO 请求,响应速度受到很大影响.本文通过演示一些实用的技巧来提高 Dojo 的性能,帮助开发人员找出 Web 2.0 应用程序的性能瓶颈. Web 2.0 与 Dojo 介绍 Web 2.0 应用以其丰富的用户体验,快捷的响应速度越来越受到众多用户的欢迎.Google Map,

IBM WebSphere Portal配置向导基于Dojo的Web端工具

而且最为强大的是,在这个版本中引入了工作流的概念,那些需要很多步骤才能完成的配置 ( 例如:搭建集群 ) 再不用痛苦,只需根据模板逐步完成即可. 相信新版的配置向导助手会大大提高用户的工作效率,简化配置流程. WebSphere Portal 里的配置向导一向是用户所喜爱的工具,它可以http://www.aliyun.com/zixun/aggregation/17185.html">帮助用户简化配置过程,原本需要用户自己手工修改配置文件中的大量配置参数,现在只需要跟随配置向导一步一步填

用Struts开发基于MVC的Web应用

MVC介绍 MVC模式是一种非常理想化的设计模式,应用MVC模式完成两个以上项目的人都有同样的体会,他们已经对以前的工作方法进行了彻底的改造.工作模式的改变要付出痛苦的代价,但现在你有现成的技术架构可以采用,避免在项目中自己开发.摸索.它就是开源Apache Struts framework,它提供了实现MVC设计模式最好的实现工具. 在本文中,我们将简单了解.体会一下模型-视图-控制器(MVC)设计模式,特别地,我们来看看如何用Struts架构来完美地实现MVC模式.我们先从理论上简单地描述M

《响应式Web图形设计》一第7章 为网页创建图像

第7章 为网页创建图像 响应式Web图形设计在这一章中,我们会首先学习借助Adobe Illustrator.Photoshop之类的图像软件来准备网页图像的技巧和技术.然后,我们将逐步尝试将图像导出为多种格式.最后,我们会探讨如何优化和压缩图像,以便网站加载更加迅捷.

使用Dojo及Node-webkit创建基于JavaScript本地桌面应用程序

作为一名 Web 前端工程师,我们的工作在大多数情况下,就是与各种浏览器打交道,开发以页面为主的 Web 应用程序.为此,非常的熟悉 HTML.CSS.JavaScript 以及各类主流的 JavaScript 工具库,比如 Dojo.jQuery.YUI 等.但是,浏览器的安全沙盒把我们限制在了一个小小的圈子里,我们不能用 JavaScript 访问操作系统的本地文件系统,不能发起一个 Socket 请求, 不能获取 CPU 和内存的使用情况, 也不能访问关系型数据库或者 NoSQL 数据库.

.NET Framework创建基于Windows应用程序

简介 目前 Web 已成了街谈巷议的话题,看起来好像Microsoft Visual Studio开发系统对创建基于Microsoft Windows的传统应用程序的支持有所减弱.实际上,Microsoft 对基于Windows的应用程序开发方面的投资在不断加大. Win 表单是一个新的窗体程序包,借助这一程序包,开发人员能够充分利用 Microsoft Windows操作系统所提供的丰富的用户界面功能,创建基于 Windows 的应用程序.Win Forms 是新的 Microsoft .NE

Dreamweaver 入门:创建基于表格的页面布局

dreamweaver|创建|页面 本文章介绍如何在 Macromedia Dreamweaver 8 中创建基于表格的页面布局.页面布局将确定您的页面在浏览器中会如何显示,例如,显示菜单.图像和 Macromedia Flash 内容将如何放置.表格是用于在 HTML 页上显示表格式数据以及对文本和图形进行布局的强有力的工具.您可以使用表格快速轻松地创建布局.在本教程中,您将在一个新的 Dreamweaver 文档中创建若干表格.这些表格的行和单元格实际上用作您将在以后添加的内容的"容器框&q

使用WebSphere Application Server Feature Pack for Web 2.0创建基于Ajax的

使用WebSphere Application Server Feature Pack for Web 2.0创建基于Ajax的动态Web应用程序 简介 与 Web 2.0 相关的技术,比如 Asynchronous JavaScript XML (Ajax).Web 远程和 Web 消息传递等,在当今的 Web 应用程序中变得日益流行.与传统 Web 应用程序相比,基于 Ajax 的应用程序 可以提供更好的响应性和交互性.在那些并入了 Ajax 架构的 Web 应用程序中 ,用户不需要等待整个

如何创建基于虚拟账号的邮件系统

按照如下图所以创建基于虚拟账号的邮件系统: 如上图所示:客户端登录邮件系统需要经过cyrus-sasl函数库账号的认证,但是cyrus-sasl无法调用mysql,所以必须安装courier-authlib来调用mysql. 发送邮件时使用dovecot来进行接收.extmail为用户提供web界面的方式来进行邮件的接收或发送.extman是为管理员提供管理的web界面. postfix默认无法支持mysql数据库,所以在此必须使用源码按安装postfix 修改主机名: [root@lyt ~]