Raphael使用

svg和canvas画图。

xmlns,xml命名空间的介绍,https://www.w3.org/TR/REC-xml-names/。

raphael是基于svg的,另一个组件jtopo是基于canvas的。

在低版本IE上,canvas显示有问题,可以用excanvas解决,但是jtopo这个组件本身使用了一些高级的ES5语法,低版本IE也要报错。

raphael在低版本IE浏览器上是基于VML的。

http://www.cnblogs.com/idealer3d/p/LearningRaphaelJSVectorGraphics.html

http://dmitrybaranovskiy.github.io/raphael/

这是Raphael官网,其中给出了不少示例,但给我感觉起点都太高,没有简单示例。同时也给出了API,无奈也是英文版的。

这一次的项目中使用到了Raphael,现如今写个简单的总结以供大家参考。

首先我们画一个矩形,矩形内填充文字,两个矩形之间用线连接,矩形不允许拖动。

 

google显示效果:;                                      IE9显示效果:

打开IE9调试窗口,发现IE9上是使用的vml技术:

现在目标是做出下图: 

代码如下:

 注意:raphael里面有一个top、bottom的概念,它们之间由元素有序连接起来,可通过next或prev获取。通过打印结果可看出,元素加入画布的先后顺序,

决定了bottom、top的顺序,最先加入的为bottom,最后的top。

 引入了set的概念:

raphael里面有一个set的概念,用于对元素集合管理,但它更多的是一个虚拟的对象。

 接上文代码:

两个forEach的执行效果分别是:

第一个成功移除,第二个失败。说明对Raphael对象进行遍历时,不能直接删除遍历元素,需要将其放到一个单独的数组中存储,再删除。

 形如:

抛开forEach的事情,说说画线,代码如下(注释的代码一个是旋转,一个是动画):

 

这里画线的起点和终点分别是两个矩形的中心点,由于元素加入画布有先后顺序,展现在画布上也有图层的先后顺序,因此灰色的线挡住了文字,调用toBack让它在最底一层展示。

调用和不调用的效果如下图:

 和 

这里为什么我要以矩形中心点为起始结束点呢?这是为了拖动时依然能正常展示。

 如何画曲线呢?

将path改为:var path = "M110,42, C130,60,160,60,190,42";

原文地址:https://www.cnblogs.com/cherishBlueSky/p/7264359.html