javascript – 使用SVG多边形元素

我正在尝试使用SVG多边形和JavaScript。我创建一个多边形并设置它的初始点列表:

var polygon = document.createElementNS('http://www.w3.org/2000/svg','polygon');
polygon.setAttribute("points", "0,0  100,100 200,200");

现在如果要修改第二点(100,100),该怎么办?现在我基本上是重建整个字符串。但是,我们可以以某种方式解决“polygon.points”作为数组,还是真的只是一个简单的简单字符串?对于非常简单的多边形,这可以正常工作,但如果我的多边形最终有数百个点对,那么我每次想要修改单个元素时,都不希望将整个“点”属性重建为一个字符串。

谢谢

没有办法我恐怕。你必须重新构造字符串。但是,将整个东西包装在一个对象中并不困难,就像:

function Polygon () {
    var pointList = [];
    this.node = document.createElementNS('http://www.w3.org/2000/svg','polygon');
    function build (arg) {
        var res = [];
        for (var i=0,l=arg.length;i<l;i++) {
            res.push(arg[i].join(','));
        }
        return res.join(' ');
    }
    this.attribute = function (key,val) {
        if (val === undefined) return node.getAttribute(key);
        node.setAttribute(key,val);
    }
    this.getPoint = function (i) {return pointList[i]}
    this.setPoint = function (i,x,y) {
        pointList[i] = [x,y];
        this.attribute('points',build(pointList));
    }
    this.points = function () {
      for (var i=0,l=arguments.length;i<l;i+=2) {
          pointList.push([arguments[i],arguments[i+1]]);
      }
      this.attribute('points',build(pointList));
    }
    // initialize 'points':
    this.points.apply(this,arguments);
}

var polygon = new Polygon(0,0, 100,100, 200,200);
polygon.setPoint(0, 50,10); // set point and automatically re-build points
polygon.points(50,50, 50,100, 200,100); // set everything
polygon.node; // refer to the actual SVG element

*不是最好的实现,但你得到的想法。

http://stackoverflow.com/questions/2152161/working-with-svg-polygon-elements

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:javascript – 使用SVG多边形元素