閱讀寫作屬性

你可以使用 DOM Level 2 Core 方法 getAttribute()getAttributeNS()setAttribute()setAttributeNS() 來讀取和寫入 SVG 元素的值,也可以使用 SVG 1.1 IDL (介面定義語言)中指定的自定義屬性和方法。

簡單的數字屬性

例如,如果你有一個 SVG 圈元素:

<circle id="circ" cx="10" cy="20" r="15" />

你可以使用 DOM 方法來讀取和寫入屬性:

var circ = document.querySelector('#circ');
var x = circ.getAttribute('cx') * 1; // Use *1 to convert from string to number value
circ.setAttribute('cy', 25);

…或者你可以使用自定義 cxcy,並定義 r 性質 SVGCircleElement 。請注意,這些不是直接數字,而是與 SVG 1.1 中的許多訪問器一樣 - 它們允許訪問動畫值。這些屬性型別為 SVGAnimatedLength 。忽略動畫和長度單位,你可以使用以下屬性:

var x = circ.cx.baseVal.value; // this is a number, not a string
circ.cy.baseVal.value = 25;

轉換

SVG 組可用於移動,旋轉,縮放和以其他方式轉換多個圖形元素作為整體。 (有關 SVG 翻譯的詳細資訊,請參閱第 7 章 )。這是一個製作笑臉的組,你可以通過調整 transform 來調整大小,旋轉和位置:

<g id="smiley" transform="translate(120,120) scale(5) rotate(30)">
  <circle r="20" fill="yellow" stroke-width="2"/>
  <path fill="none" d="M-10,5 a 5 3 0 0 0 20,0" stroke-width="2"/>
  <circle cx="-6" cy="-5" r="2" fill="#000"/>
  <circle cx="6"  cy="-5" r="2" fill="#000"/>
</g>

使用指令碼通過 DOM 方法調整此比例需要將整個 transform 屬性作為字串進行操作:

var face = document.querySelector('#smiley');

// Find the full string value of the attribute
var xform = face.getAttribute('transform');

// Use a Regular Expression to replace the existing scale with 'scale(3)'
xform = xform.replace( /scale\s*\([^)]+\)/, 'scale(3)' );

// Set the attribute to the new string.
face.setAttribute('transform',xform);

使用 SVG DOM,可以遍歷列表中的特定變換,找到所需的變換,並修改值:

var face = document.querySelector('#smiley');

// Get the SVGTransformList, ignoring animation
var xforms = face.transform.baseVal;          

// Find the scale transform (pretending we don't know its index)
for (var i=0; i<xforms.numberOfItems; ++i){
  // Get this part as an SVGTransform
  var xform = xforms.getItem(i);
  if (xform.type == SVGTransform.SVG_TRANSFORM_SCALE){
    // Set the scale; both X and Y scales are required
    xform.setScale(3,3);
    break;
  }
}