2014-04-17 43 views
0

在我的应用程序中,当用户想锁定特定矩形的位置(通过点击右上角的一个小圆圈)时,用户可以切换到锁定模式。收听KineticJS中的事件

因此,删除事件侦听器:group.off('click dblclick');

在那之后,他就可以切换回“免费模式”,这样他就可以拖动,调整大小,做任何事情。是否有一些代码与上面的代码行相反?我的意思是允许监听特定的鼠标事件。像group.on('click dblclick');(这当然不工作)。

我试过group.listening(true);并且是错误的,但问题是该圆圈被添加到该组中。所以这是一个特定的事件,我想删除,然后听取它。

回答

0

您可以侦听在舞台上单击事件并打开组以外的用户点击的组听:

免责声明 - 这里的一些示例代码,但我没有测试它:

<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> 

$(stage.getContent()).on('click', function (event) { 

    // if the group is already listening, just exit 

    if(group.listening){return;} 

    // get the current mouse position 

    var pos=stage.getPointerPosition(); 
    var mouseX=parseInt(pos.x); 
    var mouseY=parseInt(pos.y); 

    // get the current group position 

    var left=group.x(); 
    var right=left+group.width(); 
    var top=group.y(); 
    var bottom=top+group.height(); 

    // if the click is outside the group, 
    // turn the groups listening on 

    if(!(mouseX>left && mouseX<right && mouseY>top && mouseY<bottom)){ 
     group.listening(true); 
    } 

}); 

[更新:非jQuery的备用]

可以为鼠标点击使用stage.on听而不jQuery的( 'contentClick',函数(){}):

stage.on('contentClick',function(){ 
    var pos=stage.getPointerPosition(); 
    var mouseX=parseInt(pos.x); 
    var mouseY=parseInt(pos.y); 
    console.log("contentclick",mouseX,mouseY); 
}); 
+0

我添加到我的答案,说明一个非jquery方法来监听点击容器。干杯! – markE

+0

非常感谢!我会测试它 –

+0

我试过了,stage.on('contentclick',...)绑定了舞台上所有内容的点击,即使是我正在谈论的那个组。例如:http://jsfiddle.net/Rfvud/。我想操纵组中的组件事件(特别是切换动作的圆圈,以及调整大小的小锚点),以便在锁定动作时阻止大小调整。 –