2012-06-03 66 views
7

Tôi đang cố tạo và thêm bộ lọc feGaussianBlur vào hình chữ nhật SVG bằng JavaScript, sử dụng this code làm tham chiếu. Tôi nhận được một hình chữ nhật, nhưng nó không được lọc. Tôi đang làm gì sai?Tôi làm cách nào để thêm bộ lọc vào đối tượng SVG trong JavaScript?

tôi đang cố gắng như thế này:

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

[Bạn đã làm gì cố gắng?] (http://whathaveyoutried.com/) [Stack Overflow không phải là trợ lý nghiên cứu cá nhân của bạn] (http://meta.stackexchange.com/a/128553/186879). Chúng tôi sẽ có khuynh hướng giúp bạn nếu bạn chứng minh một số nỗ lực trong việc giải quyết vấn đề của mình (chẳng hạn như đăng một số mã) hơn là yêu cầu một ví dụ/nghiên cứu chính thức. –

+0

Tôi đã xóa _EDIT: Nevermind, nó làm việc cho tôi ngay bây giờ! _ Từ câu hỏi vì nó là tốt hơn để thêm giải pháp thực tế của bạn trong một hộp câu trả lời. Tôi có xu hướng coi đây là giá đặt câu hỏi, ngay cả khi bạn đã tự giải quyết nó ':) '. – halfer

Trả lời

4

Đoạn mã trên làm việc cho tôi bây giờ! Người ta chỉ có thể sử dụng các phương pháp createElementNS, setAttributeappendChild.

+2

Cảm ơn bạn đã quay trở lại với câu trả lời –

0

Nếu bạn thích mã dễ đọc hơn - như tôi làm - svg.js hiện có svg filter plugin. mã ví dụ của bạn sẽ giảm xuống còn:

var draw = SVG('canvas') 

draw.rect(90,90) 

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

Nó có lẽ là một năm quá muộn nhưng vẫn đáng nói :)

Các vấn đề liên quan