1

假设我有以下代码,该事件似乎只是不时触发,以以下两个示例为例。

第一个示例效果很好,并且事件每次都按预期触发

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/

在这方面的任何帮助都会很好地持续几个小时并且找不到有效的解决方案?

4

1 回答 1

1

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

尝试增加每个节点的高度并减少它们的数量。
例如,替换i++withi += 3并增加heightto 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'
    });
    // ...
}
于 2013-01-21T10:15:32.147 回答