2009-02-22 44 views
15

我正在尝试使用Raphael JS图形库。我想使用应该接受对象的属性梯度。文档中提到SVG规范。我发现SVG中的渐变对象,例如如何使用Raphael创建渐变对象

<linearGradient id="myFillGrad" x1="0%" y1="100%" x2="100%" y2="0%"> 
<stop offset="5%" stop-color="red" /> 
<stop offset="95%" stop-color="blue" stop-opacity="0.5" /> 
</linearGradient> 

但是我怎么能从我的javascript中引用呢?

circle.attr("gradient", "myFillGrad"); 

事先不工作:)

回答

19

UPDATE 感谢:改写为最新的拉斐尔API:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd"> 
<html lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <title>Linear Gradient</title> 
    <script src="http://raphaeljs.com/raphael.js" type="text/javascript" charset="utf-8"></script> 
</head> 
<body> 
    <script type="text/javascript" charset="utf-8"> 
    var paper = Raphael(10, 10, 800, 600); 
    var circle = paper.circle(150, 150, 150); 
    circle.attr({ 
     "fill": "90-#f00:5-#00f:95", 
     "fill-opacity": 0.5 
    }); 
    </script> 
</body> 
</html> 

attr() API的文档中找到here

+0

它看起来是这样的API已经不存在了。有关测试用例,请参阅http://jsfiddle.net/GuQA6/。 您不会碰巧知道用于改变色块不透明度的新API,是吗? – 2010-03-10 20:04:25

6

我不认为目前的拉斐尔API允许你设置比上一个,这是考虑到要传递给“不透明度” ATTR值之外的各个停止混浊,例如:

this.ellipse(x, y, r, r).attr({stroke: "none", fill: "r(.5,.1)#ccc-#ccc", opacity: 0}) 

...在最后一站将有一个不透光度0。对于更细粒度的控制我加入这个“案例”的属性,我raphael.js解析分支:

case "opacityStops": 
          if (attrs.gradient) { 
           var gradient = doc.getElementById(node.getAttribute(fillString)[rp](/^url\(#|\)$/g, E)); 
           if (gradient) { 
            var stops = gradient.getElementsByTagName("stop"); 
            var opacs=value.split("-"); 
            for(var ii=0;ii<stops.length;ii++){ 
             stops[ii][setAttribute]("stop-opacity", opacs[ii]||"1"); 
            } 
           } 
           break; 
          } 

您还必须在“availableAttrs”对象添加相应的条目,例如:

availableAttrs = {<other attrs here>..., opacityStops:"1"} 

的呼叫建立与不同的不透明径向渐变的圆形,然后停止会是什么样子:

this.ellipse(x, y, r, r).attr({stroke: "none", fill: "r(.5,.5)#fff-#fff:70-#000", "opacityStops": "1-0-0.6"}