2012-06-03 16 views
7

Estoy tratando de crear y agregar un filtro feGaussianBlur a un rectángulo SVG usando JavaScript, usando this code como referencia. Obtengo un rectángulo, pero no está filtrado. ¿Qué estoy haciendo mal?¿Cómo puedo agregar un filtro a un objeto SVG en JavaScript?

Estoy tratando de esta manera:

var container = document.getElementById("svgContainer"); 
var mySvg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); 
mySvg.setAttribute("version", "1.1"); 
container.appendChild(mySvg); 

var obj = document.createElementNS("http://www.w3.org/2000/svg", "rect"); 
obj.setAttribute("width", "90"); 
obj.setAttribute("height", "90"); 

var defs = document.createElementNS("http://www.w3.org/2000/svg", "defs"); 

var filter = document.createElementNS("http://www.w3.org/2000/svg", "filter"); 
filter.setAttribute("id","f1"); 
filter.setAttribute("x","0"); 
filter.setAttribute("y","0"); 

var gaussianFilter = document.createElementNS("http://www.w3.org/2000/svg", "feGaussianBlur"); 
gaussianFilter.setAttribute("in","SourceGraphic"); 
gaussianFilter.setAttribute("stdDeviation","15"); 

filter.appendChild(gaussianFilter); 
defs.appendChild(filter); 
mySvg.appendChild(defs);  
obj.setAttribute("filter","url(#f1)"); 

mySvg.appendChild(obj); 
+0

[¿Qué has intentado?] (Http://whathaveyoutried.com/) [desbordamiento de pila no es su asistente de investigación personal] (http://meta.stackexchange.com/a/128553/186879). Estaremos más dispuestos a ayudarlo si demuestra algún esfuerzo para resolver su problema (como publicar algún código) antes que pedir un ejemplo/investigación completo. –

+0

He eliminado _EDIT: ¡No importa, ahora me funciona! _ De la pregunta, ya que es mucho mejor agregar tu solución real en un buzón de respuestas. Tiendo a considerar esto como el precio de hacer una pregunta, incluso si lograste resolverlo tú mismo ':)'. – halfer

Respuesta

4

El código anterior funciona para mí ahora! Uno puede simplemente usar los métodos createElementNS, setAttribute y appendChild.

+2

Gracias por regresar con la respuesta –

0

Si prefiere un código más legible, como yo, - svg.js ahora tiene un svg filter plugin. El código de ejemplo podría reducirse a:

var draw = SVG('canvas') 

draw.rect(90,90) 

rect.filter(function(add) { 
    add.gaussianBlur('15') 
}) 

Es probablemente un año demasiado tarde, pero todavía vale la pena mencionar :)

Cuestiones relacionadas