2012-04-10 31 views
24

Tôi đang cố gắng thay đổi khung nhìn phần tử SVG trong JavaScript. Về cơ bản, tôi vẽ một cây tìm kiếm nhị phân và khi nó quá rộng, tôi muốn thay đổi hộp xem để thu nhỏ sao cho cây phù hợp trong cửa sổ. Tôi hiện đang sử dụng:Thao tác hộp xem SVG với JavaScript (không có thư viện)

if(SVGWidth>=1000){ 
    var a = document.getElementById('svgArea'); 
    a.setAttribute("viewbox","0 0 " + SVGWidth + " 300"); 
} 

HTML là:

<svg id="svgArea" xmlns="w3.org/2000/svg"; xmlns:xlink="w3.org/1999/xlink"; width="1000" height="300" viewBox="0 0 1000 300"> 

Tôi cũng đã cố gắng sử dụng setAttributeNS ('null', ...) nhưng điều đó dường như không làm việc một trong hai. Một điều kỳ lạ tôi nhận thấy là khi tôi cảnh báo (a) nó cho [đối tượng SVGSVGElement] có vẻ lạ. Bất kỳ trợ giúp được đánh giá cao.

+0

Tôi có thể biết tại sao bạn không muốn sử dụng thư viện không? –

+0

Tôi cần phải thêm, SVGWidth có lẽ là một tên biến xấu, chỉ nên là treeWidth. Ngoài ra, html cho SVG là:

+1

Tôi không sử dụng thư viện vì tôi đang tập trung vào việc học JavaScript. Dự án tiếp theo của tôi, tôi sẽ thêm vào các thư viện, nhưng tôi nghĩ tốt nhất là nên bắt đầu với JavaScript gốc. –

Trả lời

45

Nó sẽ là tốt để xem bối cảnh của svg, nhưng sau đây làm việc cho tôi với một tài liệu SVG tinh khiết:

shape = document.getElementsByTagName("svg")[0]; 
shape.setAttribute("viewBox", "-250 -250 500 750"); 

Có lẽ đó là vì viewBox là trường hợp nhạy cảm?

+15

Phân biệt chữ hoa chữ thường. Sigh .... –

+5

Nhìn vào nó theo cách này, nếu nó không dễ dàng như vậy, nó sẽ khó hơn. Và tôi chưa bao giờ thử gây rối với các thuộc tính phần tử svg thực tế cho đến bây giờ, vì vậy chúng tôi đều đã tìm ra một điều gì đó. – Anthony

+4

Tôi đã phạm sai lầm tương tự. –

6

Bạn gặp lỗi trong mã: "viewbox" khác với "viewBox" ... B là chữ hoa. Thay đổi mã thành:

a.setAttribute("viewBox","0 0 " + SVGWidth + " 300"); 
+0

Vâng, tôi nghĩ cách câu trả lời bây giờ là trả lời câu hỏi. 'B' là lý do nó không hoạt động. Tuy nhiên, user3434597 lẽ ra phải đọc câu trả lời cũ của Anthony trước. Có lẽ anh ta sẽ loại bỏ cái này. – akauppi

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