通俗易懂的javascript动态创建svg的函数代码
js动态创建svg在制作网页时是经常使用到的,最简单最容易理解的用处就是如果需要多个相同的svg,如果一个一个地写<svg></svg>
,即不好看,也多余,而动态创建,只需要创建一个,然后循环出来就可以了。
常规的动态创建svg
var svgNS = 'http://www.w3.org/2000/svg'; //必须需要,否则可能会导致svg不显示 var svg = document.createElementNS(svgNS, svg); //因为需要命名空间,所以使用createElementNS var path = document.createElementNS(svgNS, path); //path也需要命名空间,否则会不显示 svg.setAttribute('id','svg1'); //给svg弄个id属性; svg.setAttribute('viewBox','0 0 400 400'); //给svg弄viewBox属性 svg.setAttribute('width','400'); //给svg弄个宽度; svg.setAttribute('height','400'); //给svg弄个高度; svg.setAttribute('preserveAspectRatio','none meet'); ///给svg弄个保持纵横比属性 path.setAttribute('d','M0,0 L400,0 L400,400 L0,400 L0,0'); //画一个正方形 path.setAttribute('stroke','#f00'); //path边的颜色 path.setAttribute('strokeWidth','2'); //path边的大小 path.setAttribute('fill','#00f'); //path填充的颜色 svg.appendChild(path); //把path放进svg document.body.appendChild(svg); //把svg放进body
封装函数后动态创建多个相同的svg
var obj = document.body; var objChild = obj.getElementsByClassName('box'); var svgNS = 'http://www.w3.org/2000/svg'; function createTag(tag, objAttr){ var oTag = document.createElementNS(svgNS, tag); for(var attr in objAttr){ oTag.setAttribute(attr, objAttr[attr]); } return oTag; } for(var i=0, len = objChild.length; i<len; i++){ var svgID = 'svg'+i; var svg = createTag('svg',{viewBox:'0 0 400 400', preserveAspectRatio:'none meet',id:svgID}); var path = createTag('path',{stroke:'#f00', strokeWidth:'2', fill:'#00f',d:'M0,0 L100,0 L100,100 L0,100 L0,0'}); svg.appendChild(path); objChild[i].appendChild(svg); }