kinetic js canvas将事件监听器添加到for循环中的多个点

时间:2013-01-21 09:17:46

标签: javascript canvas html5-canvas kineticjs

假设我有以下代码,事件似乎只是一次又一次地触发以下两个例子。

第一个例子,这很有效,事件每次都会按预期触发

for (var i = 0; i < items; i++) {
            var rect = new Kinetic.Rect({
                x: 0,
                y: 1+i,
                width: 100,
                height: 2,
                fill: 'green'
            });
            rect.on('mouseover', function(evt) {
                $('#console').text(evt.shape.index);
            });
            layer.add(rect);
        }

查看行动http://jsfiddle.net/6aTNn/5/

在事件中添加旋转值似乎没有正确触发时,这是我的问题。

for (var i = 0; i < items; i++) {
            var rect = new Kinetic.Rect({
                x: stage.getWidth() / 2,
                y: stage.getHeight() / 2,
                width: 100,
                height: 1,
                fill: 'green'
            });
            rect.on('mouseover', function(evt) {
                console.log(evt.shape.index);
                $('#console').text(evt.shape.index);
            });
            rect.rotate(i * angularSpeed / items);
            // add the shape to the layer
            layer.add(rect);
        }

查看行动http://jsfiddle.net/6aTNn/8/

任何有关此问题的帮助都会很长时间,并且无法找到有效的解决方案吗?

1 个答案:

答案 0 :(得分:1)

节点太“薄”且太重叠,无法正常触发事件。

尝试增加每个节点的高度并添加更少的节点 例如,将i++替换为i += 3并将height增加为2

for (var i = 0; i < 800; i += 3) {
    var rect = new Kinetic.Rect({
        x: stage.getWidth() / 2,
        y: stage.getHeight() / 2,
        width: 100,
        height: 2,
        fill: 'green'
    });
    // ...
}