`
zha_zi
  • 浏览: 592977 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Raphaeljs 插件实现任意SVG节点加载

 
阅读更多

SVG 和Raphael

     http://raphaeljs.com/ 官网地址

     一般在做svg 开发的时候你可选的三方类库实在太少了,Raphael 是一个用户量比较大,而且一直在升级维护,只能凑活用,Raphael 有一个很强大的功能就是几乎通吃所有浏览器,这种主要兼容旧式浏览器的设计基本抛弃了很多浏览器对svg高级功能的支持,例如SMIL 协议,但是相对来说能支持这么多浏览器版本ie6+ firefox chrome 而且性能还不错,api 非常简单使用户开发难度大大降低,官方网站的例子也挺炫。总体感觉svg 是种非常好的技术,尤其是在互联网web 中有天然的优势,而且几乎所有浏览器都支持,但是不知道svg 一直没有发展起来,也就是做charts控件公司和地图行业公司一般会使用,其他用应用的的不是很多,但是前一段有个趋势排名svg 上升势头不错,svg 应该是网页图形开发的非常重要的选择,不应该被边缘化,Raphael 的作者挺牛的还是参与svg 标准制定后来被sencha 弄走做charts extjs4系列的chart 好像就是他负责做的,这些都是闲话瞎扯。

     使用中的烦恼

在使用raphael 的时候都被折磨过,raphael 基本都是编程式节点加载,通过代码设置svg 的节点属性

 

// Creates canvas 320 × 200 at 10, 50
var paper = Raphael(10, 50, 320, 200);

// Creates circle at x = 50, y = 40, with radius 10
var circle = paper.circle(50, 40, 10);
// Sets the fill attribute of the circle to red (#f00)
circle.attr("fill", "#f00");

// Sets the stroke attribute of the circle to white
circle.attr("stroke", "#fff");

 上边的代码

1:创建svg 画布

2:创建一个circle 

3:给circle 添加属性

    但是我们在实际工作中相当一部分的工作时在使用美工绘制好的图形,对图形中的某些部分进行控制,

例如下图

 

      只要经常使用raphael或者使用Extjs4 系列 的开发者肯定对这只老虎特别熟悉,他的源码也比较恐怖,

http://docs.sencha.com/extjs/4.0.7/#!/example/draw/Tiger.html 这个是在线演示里边有绘制这只老虎的源代码1537 行,我以前在看到这个例子实在不理解作者的目的。

这只虎形成的过程应该是一下步骤

1:美工设计小样

2:使用SVG 绘图工具画出来

3:交给开发者

       开发者拿到这个svg 文件以后如果按照raphael 的做法那就是 把所有属性用raphael 的方式创建出来,我感觉任何程序员会直接疯掉的,这个工作量是让人无法接受,而你做的着所有的一切仅仅是想最后对这只虎进行 平移,缩放,隐藏等这些简单操作

       我在当时使用的时候特别希望raphael 的作者提供一个节点加载工具,把这个复杂无比的东西一次性加载当做一个整体或者是一个图层处理,

什么是图层:

           我不是专业做图形处理的这里是说一下我的理解,就以这只老虎为例子,如果一个画布上加载了一只老虎后又加载了另一只,我们对两个都是整体处理,可以整体调整位置,覆盖关系等就视为一个图层,加载了两个就是两个图层,可以单独处理互不影响,没有相对定位的问题,每个图层的位置都是相对于画布,这样业务处理会非常简单方便利于操作和理解

 

Raphael 不支持节点加载的方式处理svg 图形,在google上搜过很多的方式都没有找到如何处理已存在的节点加载方式,最近重新研究Raphael 尝试找方式处理这个问题,下边代码是通过写了一个Raphael 的插件解决加载节点,在Raphael绘图引擎的底层增加的对<g> 标签的支持,所以就可以对svg 进行类似于图层的处理。

代码中有对 path circle g 节点处理,不停的点击按钮就可以看出图形的变化 

 

 

var canvas=Raphael(10,50,320,200); 
var node= document.getElementById("cr");  
var r1=canvas.circle(50, 50, 10);
r1.attr("fill", "#00ff00");
r1.attr("stroke", "#00ff00");
var r2=canvas.circle(20, 20, 30);
r2.attr("fill", "#00ff00");
r2.attr("stroke", "#00ff00");
var g=canvas.load(document.getElementById("gid")); // 使用扩展的load 方法加载一个外边 g标签
var tg=canvas.load(document.getElementById("triger"));//使用扩展的load 方法加载一个老虎var g= canvas.g(); // 创建一个g 标签
g.add(r1);        // 使用g 扩张的add 属性增加子元素
g.add(r2);
//circle.transform("t100,100r45t-100"); 
//path.transform("t500,500");
g.transform("t500,500"); // 对g 元素进行整体移动
 

 

 

 后记1:

          扩展的g 标签可以通过raphael 的 transform 接口进行处理,但是好像使用animate 的使用出现了一些问题,正在研究animate 的实现原理和transform 的区别如何把animate 的算法应用的到g 标签需要研究一下。

         

版本改进1:

                增加对vml group标签的支持,

                增加g 标签add addArray 功能支持 ,可以很简单的把任意一个rapheal 节点放到g 或group 标签下

 

版本改进2:

               实现了svg 在g 标签下raphael的animate 和transform支持,但是无法解决vml 中group 下的transform 和animate,

 

  • 大小: 76.4 KB
分享到:
评论

相关推荐

    SVG画图插件raphaelJS

    7. **社区和扩展**:RaphaelJS拥有活跃的开发者社区,提供了许多额外的插件和工具,可以进一步增强其功能,如raphael.draggable.js用于实现拖放功能,raphael.textpath.js用于将文本沿着路径放置等。 8. **性能优化...

    raphaeljs_starter

    - **矢量图形支持**:RaphaelJS支持SVG(可缩放矢量图形)和VML(Vector Markup Language),这意味着它可以在各种浏览器上提供高质量的图形表现。 - **交互性**:通过结合JavaScript,RaphaelJS能够创建响应用户...

    RaphaelJS.group:Raphael JS SVG 组元素插件

    RaphaelJS.group 将 SVG 组元素带入 Raphael JS 框架的插件。 简短的文档 首先看一下在页面中添加脚本的'index.html'文件的源代码。 发起群组: var group = new r.group('container',array); 其中:'r' 是 ...

    [RaphaelJS] RaphaelJS 编程 (英文版)

    Create beautiful, interactive images on the Web with RaphaelJS, the JavaScript library that lets you draw Scalable Vector Graphics (SVG) right in the browser. With this concise guide, you’ll quickly ...

    Learning Raphael JS Vector Graphics 书+源码

    通过这本书的学习,开发者不仅可以掌握Raphael.js的基本用法,还能了解到如何利用SVG技术在网页设计中实现创新和个性化。无论是前端开发人员还是设计师,都能从中受益,提升在Web图形设计和开发上的技能。同时,结合...

    js矢量画图,raphael.js使用案例,svg画图,web画图,b/s画图,网页画图

    基于raphael.js 实现矢量图形的绘制,兼容IE,fireFox,chrome等主流浏览器。 功能包括:画矩形,画圆,画三角形,画直线,画虚线,画大括号,画文字。 要绘制不规则曲线可以在这个基础上自己修改一下。 解压后直接...

    Learning Raphael JS Vector Graphics 配套源码

    2. **SVG与VML支持**:Raphael根据浏览器的能力自动选择SVG或VML(在旧版Internet Explorer中)作为渲染引擎,使得在所有现代和旧版浏览器中都能提供一致的性能。 3. **丰富的图形元素**:Raphael提供了一系列的...

    使用RaphaelJS开发可拖拽的工作流前台

    由于其跨浏览器兼容性,RaphaelJS成为了在网页上实现动态图形和交互式图表的理想选择。 二、RaphaelJS的核心功能 1. 创建图形:RaphaelJS提供了多种图形元素,如圆、矩形、椭圆、多边形、线等,可以方便地创建和...

    IE9以下的无需插件显示svg

    这篇博文可能探讨了如何在这些较旧的Internet Explorer浏览器中实现SVG显示,而无需安装额外的插件。 Raphael.js是一个JavaScript库,专门用于处理SVG和VML(Vector Markup Language),VML是IE8及更早版本中用来...

    Raphael SVG库

    支持SVG开发的js库,非常好用, 这是压缩版本。

    raphael js所有文档以及网站内容,书籍

    10. **社区和扩展**:Raphaël.js有一个活跃的开发者社区,提供许多扩展库,如Paper.js、Raphaël插件等,它们扩展了Raphaël的功能,满足更多特定需求。 总的来说,掌握Raphaël.js意味着你可以创建出富有交互性的...

    raphaeljs 炫丽 js特效

    而`raphael-min.js`则是经过压缩和优化后的版本,体积更小,加载速度更快,适用于生产环境。 在实际应用中,RaphaëlJS常用于地图应用、数据可视化、图表制作、游戏开发等领域。通过结合其他JavaScript库,如jQuery...

    raphael.js扩展的拖拽功能,raphael.draggable.js,raphael.extension.js

    在SVG和VML图形库的世界里,Raphael.js是一个非常受欢迎的JavaScript库,它使得在网页上创建和操作矢量图形变得极其简单。Raphael.js不仅支持多种浏览器,包括那些不支持HTML5 canvas的老旧浏览器,而且提供了一套...

    svg:受 raphaeljs、svgjs 和 snap.svg 启发的小型简单 SVG Javascript 库

    介绍一个简单的 SVG javascript 库建造安装依赖npm install 该库使用 gulp 来运行所有任务: 要构建运行gulp 。 文件将输出到 dist 文件夹。教程不。 可能也不会发生。去做对动画方法进行更广泛的测试创建更好的界面...

    raphaeljs chm手册

    难得一见的raphaeljs chm手册 绝对超值!

    raphaeljs api

    RaphaëlJS 的目标是为开发者提供一个跨浏览器的解决方案,使得在现代和老式浏览器(如Internet Explorer 6+)中都能实现矢量图形的绘制。 RaphaëlJS API 提供了一系列丰富的函数和方法,用于创建、操作和管理图形...

    raphaeljs源码库0分分享

    这个"raphaeljs源码库0分分享"包含的`raphael-master`压缩包可能包含了Raphaël.js的完整源代码,对于学习和理解这个库的工作原理非常有价值。源码库通常会包含以下组成部分: 1. **源代码文件**:`raphael.js`和`...

    raphael.js实例

    在"raphael.js实例"中,我们可以看到以下几个关键知识点: 1. **矢量图形创建**:Raphaël.js 使用SVG或VML来创建矢量图形,这意味着图形可以无损地缩放,且不会因为像素化而失去清晰度。开发者可以通过调用库中的...

Global site tag (gtag.js) - Google Analytics