Eine etwas umständliche Möglichkeit, SVG-Filter mit Raphael-Objekten zu verwenden, ist die folgende Technik. Sie erzeugt ein Raphael-Rechteck und fügt die Filterdefinition in dasselbe SVG-Dokument ein. Dies funktioniert natürlich nicht mit älteren Browsern, die keine Unterstützung für Inline-SVG bieten. Dies ist jedoch kein großes Problem, da ältere Browser ebenfalls keine SVG-Filterunterstützung bieten.
Obwohl dies nicht jQuery getaggt Frage, für die Einfachheit der Code verwendet jQuery für DOM-Manipulationen. Das Namespace-Problem wird durch die Verwendung von Dummy-SVG-Elementen gelöst, was den Vorteil hat, dass SVG-Elemente mit Hilfe von Text-Strings (anstelle von DOM-Methoden) erstellt werden können. Lasst den Browser tun, was er kann!
Das Arbeitsbeispiel ist in http://jsbin.com/ilinan/1 .
<html>
<head>
<script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.0.0/raphael-min.js"></script>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
var p = Raphael("cont", 300, 200);
$(p.canvas).attr("id", "p");
var rect = p.rect(10, 10, 100, 100);
$(rect.node).attr("id", "rect");
$("#rect").attr("filter", "url(#innerbewel)");
$("#rect").attr("fill", "red");
var f = "<filter id='innerbewel' x0='-50%' y0='-50%' width='200%' height='200%'>\
<feGaussianBlur in='SourceAlpha' stdDeviation='2' result='blur'/>\
<feOffset dy='3' dx='3'/>\
<feComposite in2='SourceAlpha' operator='arithmetic'\
k2='-1' k3='1' result='hlDiff'/>\
<feFlood flood-color='white' flood-opacity='0.8'/>\
<feComposite in2='hlDiff' operator='in'/>\
<feComposite in2='SourceGraphic' operator='over' result='withGlow'/>\
\
<feOffset in='blur' dy='-3' dx='-3'/>\
<feComposite in2='SourceAlpha' operator='arithmetic'\
k2='-1' k3='1' result='shadowDiff'/>\
<feFlood flood-color='black' flood-opacity='0.8'/>\
<feComposite in2='shadowDiff' operator='in'/>\
<feComposite in2='withGlow' operator='over'/>\
</filter>";
// Create dummy svg with filter definition
$("body").append('<svg id="dummy" style="display:none"><defs>' + f + '</defs></svg>');
// Append filter definition to Raphael created svg
$("#p defs").append($("#dummy filter"));
// Remove dummy
$("#dummy").remove();
$("#rect").attr("fill", "orange");
});
</script>
</head>
<body>
<div id="cont"></div>
</body>