javascript - KineticJS - 无法添加动态对象

标签 javascript jquery kineticjs

我需要创建一种容器来使用 KineticJS 管理动态操作。

我有一个简单的对象,我们可以使用函数从中添加一个圆。

这是我的代码:

function Stage() {
    var self = this;

    self.stage = new Kinetic.Stage({
        container: "museumMapContainer",
        width: 500,
        height: 500
    });

    self.layer = new Kinetic.Layer();

    self.addCircle = function (x,y) {
        var circle = new Kinetic.Circle({
            x: x,
            y: y,
            radius: 40,
            fill: 'red',
            stroke: 'black',
            strokeWidth: 4,
            draggable: true
        });

        circle.on('mouseover', function() {
            document.body.style.cursor = 'pointer';
        });
        circle.on('mouseout', function() {
            document.body.style.cursor = 'default';
        });
        self.layer.add(circle);
    }

    self.stage.add(self.layer);

}

stage = new Stage();

stage.addCircle(250,250);

通常,如果我不将代码放在函数中,我可以轻松地创建一个圆圈而不会出现任何问题。但是,此代码不起作用,我真的不知道为什么。

这是一个 Plunker:http://plnkr.co/edit/E1fbCFMeZwGNAKhsArhm?p=preview

控制台没有错误,也没有任何显示,我不知道为什么...

最佳答案

确保在创建新圈子后执行 layer.draw:

<!DOCTYPE html>
<html>
  <head>
<script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v5.0.1.min.js"></script>
  </head>
  <body>
    <h1>Hello Plunker!</h1>
    <div id="museumMapContainer" style="width:500px;height:500px;border:1px solid black;"></div>

        <script defer="defer">

        function Stage() {

            var self = this;

            self.stage = new Kinetic.Stage({
                container: "museumMapContainer",
                width: 500,
                height: 500
            });

            self.layer = new Kinetic.Layer();
            self.stage.add(self.layer);

            self.addCircle = function (x,y) {
                var circle = new Kinetic.Circle({
                    x: x,
                    y: y,
                    radius: 40,
                    fill: 'red',
                    stroke: 'black',
                    strokeWidth: 4,
                    draggable: true
                });

                circle.on('mouseover', function() {
                    document.body.style.cursor = 'pointer';
                });
                circle.on('mouseout', function() {
                    document.body.style.cursor = 'default';
                });
                self.layer.add(circle);
                self.layer.draw();
            }
        }

        stage = new Stage();

        stage.addCircle(250,250);

    </script>
  </body>
</html>

关于javascript - KineticJS - 无法添加动态对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22613746/

相关文章:

javascript - 这个序列可以用 HTML5 完成吗?

javascript - 销毁 KonvaJS 补间末端的多个形状

javascript - 一个服务调用的 AngularJs 输出取决于另一个服务调用

javascript - 无需手动遍历每个对象即可将属性添加到大量对象

javascript - 通过动态生成的标签获取图片源

javascript - 如何从内容脚本调用 chrome.tabs.create API?

javascript - Kineticjs 会导致内存泄漏。舞台被摧毁后不释放

javascript - 使用类方法作为回调时的 Promise.then 执行上下文

javascript - lodash/underscore 通过数组值中的键查找对象

jQuery - iPad/iPhone 上的可拖动图像 - 如何集成 event.preventDefault();?