有一个解决方法,但这涉及编辑raphael.js
找到代码块:
el.appendChild($("stop", {
offset: dots[i].offset ? dots[i].offset : i ? "100%" : "0%",
"stop-color": dots[i].color || "#fff"
}));
并使用以下方法替换它:
el.appendChild($("stop", {
offset: dots[i].offset ? dots[i].offset : i ? "100%" : "0%",
"stop-color": dots[i].color || "#fff",
"stop-opacity": R.is(dots[i].opacity, "undefined") ? 1 : dots[i].opacity
}));
更新:后来发现我不小心错过了补丁中的一行更改。
接下来,在函数R._parseDots中找到以下行
par[2] && (dot.offset = par[2] + "%");
替换成
dot.opacity = dot.color.opacity;
par[2] && (dot.offset = par[2] + "%");
通过上面的代码,您可以轻松地使用myRect.attr("fill", "90-rgba(255,0,0,0.25)-rgba(0,255,0,0.75)-rgba(0,0,255,0.25)"); 之类的东西,但请注意,该解决方案是针对 SVG 输出的,VML 不支持这一点。 VML 仅支持在 0% 位置的渐变上的单个不透明度,以及在 100% 位置的最后一个不透明度可选的第二个不透明度。还有一些 VML 的代码更改,我不包括在这里。
代码可以在fiddle http://jsfiddle.net/shamasis/SYdJW/中看到