Snap.svg返回对象说“对象没有圆圈方法”

时间:2014-02-23 05:39:44

标签: javascript svg snap.svg

我正在尝试使用Snap包装现有的svg元素。当我尝试创建一个圆圈时,出现错误:

var e = document.getElementById("svgId");
var paper = Snap(e); var button1 = paper.circle(20,20,50);

上面的代码生成了这个错误:

未捕获TypeError:对象[object Object]没有方法'circle'

我对js很新,对svg来说更是如此。关于此事的任何帮助都非常感谢。

以下演示产生相同的错误:

    <!DOCTYPE html>`
    <html>
    <head lang="en">
    <script type="text/javascript" src="snap.svg-min.js"></script>
    <script type="text/javascript">
        function init(){
            var e = document.createElement("svg");
            e.id = "demo";
            var paper = Snap(e);
            console.log(paper);
            var button1 = paper.circle(20,20,50);
            button1.attr({
                 fill:"#bbbb55",
                 stroke:"000",
                 strokeWidth: 3
            });
        }
    </script>
    </head>
    <body onload="init()">
    </body>
    </html>

1 个答案:

答案 0 :(得分:3)

我将在同一页面上包含3个不同的示例,因为它有时可用于查看和比较......

第一个示例圈,来自动态创建的svg元素,类似于您的示例(注意,您还需要将svg元素附加到示例中的body,并且可能使用createElementNS)。

第二个示例圈,来自正文中的svg标记。

第3个例子圈,就是让Snap创建元素本身(通常是这样,或者使用svg元素,比如Snap(“#container”))。

jsfiddle here

    var e = document.createElementNS("http://www.w3.org/2000/svg", "svg");
    e.setAttribute('style', 'border: 1px solid black');
    e.setAttribute('width', '600');
    e.setAttribute('height', '250');
    e.id="svg1";
    document.body.appendChild( e );

    var paper1 = Snap( "#svg1" ); //use element created above
    var button1 = paper1.circle(100,100,100);
    button1.attr({
             fill:"blue",
             stroke:"green",
             strokeWidth: 3
            });

    var paper2 = Snap( "#svg2" ); //use element from markup below
    var button2 = paper2.circle(100,100,100);
    button2.attr({
             fill:"red",
             stroke:"yellow",
             strokeWidth: 3
            });

    var paper3 = Snap(200,200); //let Snap create element
    var button3 = paper3.circle(100,100,100);
    button3.attr({
             fill:"purple",
             stroke:"silver",
             strokeWidth: 3
            });

<body onload="init()">

...

<svg id="svg2" width="200" height="200">
    <circle r="20" cx="20" cy="20"/>
</svg>

</body>
</html>