网页开发工具箱:Raphaël

这是关于所有网页开发者应该在其工具箱中拥有的有用库系列文章中的第一篇。我的目的是向您展示这些库的功能,并帮助您以最佳方式使用它们。这篇文章专门介绍了 Raphaël 库。

简介

Raphaël 是一个最初由 Dmitry Baranovskiy 编写的库,现在是 Sencha Labs 的一部分。

该库的目的是简化在 Web 上使用矢量图形的工作。Raphaël 依赖于 SVG W3C 建议(在所有现代浏览器中都得到很好的支持),并且在旧版本的 Internet Explorer 中回退到 Micrsoft VML 语言。它还试图协调 SVG 实现中的一些工作问题,例如 SVG 动画。因此,Raphaël 是一个非常不错的包装器,可以在整个 Web 上生成一致的出色的图形。

基本用法

该库有 非常好的文档,其中包含许多示例。请不要犹豫,充分利用它。

以下示例将在具有 id “myPaper” 的 HTML 元素内绘制一个简单的红色圆圈。

// the following example creates a drawing zone
// that is 100px wide by 100px high.
// This drawing zone is created at the top left corner
// of the #myPaper element (or its top right corner in
// dir="rtl" elements)
var paper = Raphael("myPaper", 100, 100);

// The circle will have a radius of 40
// and its center will be at coordinate 50,50
var c = paper.circle(50, 50, 40);

// The circle will be filled with red
// Note that the name of each element property
// follow the SVG recommendation
c.attr({
    fill: "#900"
});

高级用法

尽管 Raphaël 减少了 SVG 提供的功能(主要是因为 VML 回退),但它允许执行非常高级的操作。

  • 高级矩阵转换
  • 高级事件处理程序
  • 跨浏览器动画
  • 简单的拖动系统
  • 路径交点检测

Raphaël 还可以通过一个扩展系统进行扩展,该系统允许您构建自定义函数。

例如,这是一个绘制饼图的扩展。

/**
 * Pie method
 *
 * cx: x position of the rotating center of the pie
 * cy: y position of the rotating center of the pie
 * r : radius of the pie
 * a1: angle expressed in degrees where the pie start
 * a2: angle expressed in degrees where the pie end
 */
Raphael.fn.pie = function (cx, cy, r, a1, a2) {
    var d,
        flag = (a2 - a1) > 180;

    a1 = (a1 % 360) * Math.PI / 180;
    a2 = (a2 % 360) * Math.PI / 180;

    d = [
        // Setting the rotating axe of the pie
        "M", cx, cy,

        // Go to the start of the curve
        "l", r * Math.cos(a1), r * Math.sin(a1),

        // Drawing the curve to its end
        "A", r, r, "0", +flag, "1",
        cx + r * Math.cos(a2), cy + r * Math.sin(a2),

        // Closing the path
        "z"
    ];

    return this.path(d.join(' '));
};

注意:在上面的示例中,您必须熟悉 SVG 路径语法(Raphaël 会将其转换为 VML 语法),但一旦完成,您就可以像其他任何 Raphaël 基本元素一样重复使用它。看看这个扩展如何在 jsFiddle 上绘制彩色轮

JSFiddle 演示.

限制和注意事项

如果您不熟悉 SVG 和/或想要支持旧版本的 MS Internet Explorer 浏览器,那么此工具适合您。但是,它是一个 JavaScript 库,这意味着您必须了解 JavaScript 才能使用它。您不能使用 SVG 并要求 Raphaël 解析并解释它(为此,存在其他库)。

在浏览器支持方面,Raphaël 为您提供了广泛的基础。Raphaël 目前支持 Firefox 3.0+、Safari 3.0+、Chrome 5.0+、Opera 9.5+ 和 Internet Explorer 6.0+。

事实上,唯一无法利用 Raphaël 的浏览器是 Android 1.x 和 2.x 的原生浏览器(以及许多功能手机浏览器)。这是因为这些浏览器不支持任何矢量语言。Android 从 Android 3.0 开始(部分)支持 SVG,因此如果您想与所有移动设备一起工作,请注意这一点。

结论

Raphaël 是第一个允许网页设计师和网页开发者在实际中使用 SVG 的库。如果您想编写一些不错的应用程序,而不需要使用完整的 SVG DOM API,或者您需要支持旧浏览器,那么这个库将赋予您一些力量。

总之,以下是一些 Raphaël 的酷炫用法。

关于 Jeremie Patonnier

Jeremie 是 Mozilla 开发者网络的长期贡献者/员工,自 2000 年以来一直是专业的网页开发者。他倡导网页标准,编写文档,并创建各种关于网页技术的內容,希望使每个人都能接触到这些技术。

Jeremie Patonnier 的更多文章……


4 条评论

  1. pd

    这个系列文章听起来很有前景,谢谢。

    虽然 SVG 似乎仍然是等待解决问题的解决方案,但 HTML 中的矢量图形支持当然是至关重要的。但现在,Flash 中使用矢量图形来对“舞台”上的对象进行补间动画等等,似乎已经成为过去,也许类似于令人厌烦的虚荣 gif 和早期的 DHTML 繁琐。希望像这样的库能够以更恰当的方式使用 ::)

    其中一个用途将是用于动画条形图,我希望如此。从理论上讲,HTML5 有能力超越 Powerpoint 进行演示,它能够显示/隐藏幻灯片和项目符号点,以及制作看起来很花哨的动画图形,这一点很重要。

    2012 年 5 月 15 日 下午 07:57

    1. Jeremie Patonnier

      你好!

      由于 HTML5,SGV 在现代网页设计中拥有强大的优势。其中一个最大的用例是关于响应式网页设计。拥有能够在不损失质量的情况下进行缩放的图像对于构建在低分辨率屏幕以及高分辨率屏幕(如 iPad3 或 iPhone4 上)上都能正常工作的界面非常重要。

      另一个要点是,目前通过 SVG 可用的一些技术正在通过 CSS(过滤器、变换等)扩展到 HTML。在许多情况下,SVG 为所有这些新兴 CSS 技术提供了可靠的回退。

      2012 年 5 月 15 日 下午 08:54

  2. zoomclub

    您见过 D3 吗?应该看一下它,看看一些很棒的 SVG/HTML 作品。请点击以下链接了解更多信息:https://d3js.cn

    2012 年 5 月 16 日 下午 23:52

    1. Jeremie Patonnier

      是的,绝对是 :)

      我们计划在不久的将来发布一篇关于 D3 的完整文章;)

      2012 年 5 月 17 日 上午 00:15

本文的评论已关闭。