【发布时间】:2015-08-15 03:42:48
【问题描述】:
我希望在网站上制作一些动画,并希望使用 SVG 图形。
我听说 Raphael 是一个很棒的库来帮助渲染图形,但我试图在我的公司说明为什么我们应该使用它而不是传统的 SVG 或只使用 CSS3 动画进行操作。从Stack Overflow post on SVG vs CSS3、Raphael Tutorial 和 this obnoxious looking Raphael site,我收集了一些关于为什么我们应该使用 Raphael 库而不是传统 SVG 或 CSS3 动画的信息:
CSS3:
- 传统上用于 sprite/png 动画,导致缩放期间质量损失
传统 SVG:
- 无法操作现有的 HTML 元素
- 可以使用 CSS3 中的计时功能无法使用的线条动画绘制事物
- 可以在绘制对象后与对象交互
- SVG 元素可以触发事件并且可以使用 SVG 编写脚本
- 可以操作导入的 SVG 文件的任何方面(类似于 Illustrator 中的复杂徽标)
拉斐尔 JS:
- 在我看来是一个简单的包装库(类似于 jQuery),它使一些传统的 SVG 操作操作更容易编写?
我想出了一些拉斐尔似乎引人注目的比较......
形状:
CSS3:
#circle {
width: 100px;
height: 100px;
background: red;
-moz-border-radius: 50px;
-webkit-border-radius: 50px;
border-radius: 50px;
}
<div id="circle"></div>
SVG:
<svg height="100" width="100">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>
拉斐尔:
var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
var circle = paper.circle(100, 100, 80); //cleaner
circle.attr({fill: 'red', stroke: 'black', 'stroke-width': 2});
操纵:
CSS3:类似...
@keyframes moveCircle {
from { /* start value */ }
to { /* end value */ }
}
<div id="moveCircle"></div>
SVG:更复杂
<circle id="my-circle" r="30" cx="50" cy="50" fill="orange" />
<animate
xlink:href="#my-circle"
attributeName="cx"
from="50"
to="450"
dur="1s"
begin="click"
fill="freeze" />
拉斐尔:像这样:
circle.node.onclick = function () {
this.animate({ cx: this.cx+=100, cy: this.cy+=100}, 1000);
};
此外,使用path("M 0 0 l...") 和贝塞尔曲线(用于图形)在 Raphael 中似乎更容易绘制自定义线等,但仍然使用 SVG 和 CSS3。
基本上,我没有令人信服的案例,因为我不完全了解 CSS3 或 SVG,因此无法知道 Raphael 会从哪里来救援。我希望有人能帮助我理解。
【问题讨论】:
标签: javascript css svg raphael