2011-10-06 7 views
12

Nasz system ładuje pliki SVG programowo do HTML za pośrednictwem AJAX. Typowy plik SVG zaczyna:Uzyskiwanie oryginalnego okna podglądu SVG za pośrednictwem javascript

<svg xmlns='http://www.w3.org/2000/svg' viewBox='0,0 65415,41616' xml:space='preserve' height='50.000cm' width='50.000cm' xmlns:xlink='http://www.w3.org/1999/xlink 

Ale dziwnie w JavaScript wydaje się być sposobem na uzyskanie tego „viewBox” z powrotem SVG DOM - albo jako ciąg znaków, lub jako zestaw wartości. Na przykład pod Mozillą firebug zgłasza, że ​​węzeł svg ma 5 z 6 atrybutów, które określamy - mianowicie: xmlns, xml: space, height, width i xmlns: xlink. Jednak z tej listy wyraźnie brakuje numeru ViewBox.

Czy istnieje możliwość programistycznego pobrania tej wartości? - gdzie jest w SVG DOM? (Nie możemy wprowadzić bibliotek zewnętrznych).

+0

Miałem to pytanie, a odpowiedź była dla mnie niezwykle przydatna. Byłoby miło mieć szczegóły o tym, dlaczego został zamknięty. –

+0

to samo tutaj ... głosowanie na ponowne otwarcie. –

Odpowiedz

5

Będziesz chciał rzucić okiem na interfejs SVGFitToViewBox, który określa właściwość viewBox. Interfejs dla elementów svg, SVGSVGElement, rozszerza ten interfejs, więc może to być właściwość, której szukasz.

+2

Brak rozwiązania? Tylko linki? – earl3s

35
  1. idź do http://phrogz.net/SVG/svg_in_xhtml5.xhtml
  2. otwórz witrynę sieci Web konsola przeglądarka
  3. Wpisz kod:

    var svg = document.querySelector('svg'); 
    var box = svg.getAttribute('viewBox'); 
    box.split(/\s+|,/); 
    
  4. Obserwować reakcję chwalebne:

    ["-350", "-250", "700", "500"] 
    
  5. Alternatywnie, wpisz kod:

    var box = svg.viewBox.baseVal; 
    [ box.x, box.y, box.width, box.height ] 
    
  6. Przestrzegać wspaniałą odpowiedź:

    [ -350, -250, 700, 500 ] 
    

Innymi słowy: tak, można uzyskać viewBox z DOM, zarówno jako standard DOM 2 attribute jak również explicit ECMASCript binding.

+1

To właśnie próbowałem pierwotnie. Więc po prostu spróbowałem ponownie, ale var box = svg.getAttribute ('viewBox'); dostaje mi "niezdefiniowany", mimo że element svg jest po prostu prawym węzłem w debugerze. Inne atrybuty, takie jak "height", mogą być pobierane w ten sposób, ale nie "viewBox". To po prostu dziwne. –

+0

Inne podejście, svg.viewBox.baseVal, pobiera mi pole "0,0,0,0". Moje problemy mogą dotyczyć ładowania SVG przez Ajaxa –

+0

Mam ten sam problem, bez udziału Ajaxa. –

Powiązane problemy