KineticJS on事件传递变量

时间:2013-08-14 11:04:45

标签: events canvas kineticjs

在jQuery中,可以将其他变量传递到事件中以处理范围问题,如下所示:

$('#element').click({index: i}, function(event){
    console.log(event.data.index);
});

我如何在KineticJS中执行此操作,因为on事件方法不提供此功能?我设法使用数组生成圆圈,但似乎无法将特定数据传递给每个事件:

var data = [12.22, 34.45, 8.9];
var circles = [];

for(var i in data){
circles[i] = new Kinetic.Circle({
    x : Math.random() * stage.getWidth(),
    y : Math.random() * stage.getHeight(),
    radius : 4,
    fill : 'white'
});

circles[i].on('mousemove', {value: data[i]}, function() {
    console.log('need to use value for this particular event here');
});

shapesLayer.add(circles[i]);
}

2 个答案:

答案 0 :(得分:2)

您可以为圈子添加新属性,并将数据值保存在其中:

circles[i].setAttr('dataVal',data[i]);

然后你可以在这样的事件处理程序中访问它。

circles[i].on('mousemove', function() {
    console.log(this.getAttr(`dataVal`));
});

答案 1 :(得分:0)

谢谢@Ani。当我发布问题时,我开始认为我可能只是将一个属性“注入”到对象中并像这样访问它。从编码标准来看,你的方式会更好,但是下面的内容也适用于原始版本:

circles[i].value = data[i];

circles[i].on('mouseover', function() {
    console.log(this.value);
});