15

Raphael JS グラフィック ライブラリを使用しようとしていました。オブジェクトを受け入れる必要がある属性 gradient を使用したいと思います。ドキュメントには、SVG 仕様を参照するよう記載されています。たとえば、SVGでグラデーションオブジェクトを見つけました

<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"); 

動作しません:)事前に感謝します

4

2 に答える 2

19

更新:最新の Raphael 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のドキュメントは、ここにあります

于 2009-02-25T05:46:06.017 に答える
6

現在の raphael API では、「不透明度」属性に渡された値が与えられる最後の不透明度以外の個々の停止不透明度を設定できるとは思えません。たとえば、次のようになります。

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

...最後のストップで stop-opacity が 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"}
于 2010-08-30T21:58:41.730 に答える