Я не верю, что текущий API-интерфейс Raphael позволяет вам устанавливать отдельные значения непрозрачности остановки, отличные от последней, которым присваивается значение, переданное атрибуту opacity, например:
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"}