在 KineticJS 中检测舞台上的点击而不是形状上的点击

Posted

技术标签:

【中文标题】在 KineticJS 中检测舞台上的点击而不是形状上的点击【英文标题】:Detecting a Click on Stage but not on Shape in KineticJS 【发布时间】:2012-12-03 21:00:18 【问题描述】:

在 KineticJS 中,如何检测在对象/形状外部发生点击的 Click 事件?

我试图让Rect 在用户点击它时将其比例更改为2,并在用户点击它之外的任何地方时返回到1 的比例。

JSfiddle: http://jsfiddle.net/ABTAD/8/

设法检测到舞台上的点击,但点击Rect 也会触发点击处理程序!!!不知何故,.setScale(1) 什么都不做,而console.log 打印出一些东西。当点击Rect而不是空舞台时,如何防止点击处理程序触发?

检测舞台点击的JS代码

window.stage.getContainer().addEventListener('click', function(e) 
    $.each(window.layer.get('.box'), function(index, box) 
       box.setScale(1);
       console.log('clicked on stage');
    );
);

【问题讨论】:

你知道我还在学习 Kinetic,但是这里有一个 JS 指针。您不需要将窗口放在事物之前以使它们全局化。如果您将 var 放在变量 decleration 之前,那么它将仅在创建它的范围/函数中可用。不将 var 放在变量 decleration 之前将使其成为全局(与将 window. 放在它之前相同)。你看到这篇文章了吗?..***.com/questions/13866660/…他把一个矩形作为第一层,然后你可以检查。另外,使用普通事件是个好主意吗? 谢谢!!我实际上用 var App = ; App.stage = ... 给它们命名了,还没有看到那个帖子,听起来像是一个 gd 的想法 jsfiddle.net/ABTAD/11 太棒了,你成功了。 【参考方案1】:

您可以使用 stage.getContent() 访问舞台内容包装器。从那里,您可以像这样添加事件处理程序:

stage.getContent().addEventListener('click', ...); // 普通的javascript

$(stage.getContent()).on('click', ...); // jquery

【讨论】:

从 KineticJS 4.3.1 getDOM() 重命名为 getContent() 嗨,这可以在图层上完成,而无需设置背景矩形并绑定点击事件吗?

以上是关于在 KineticJS 中检测舞台上的点击而不是形状上的点击的主要内容,如果未能解决你的问题,请参考以下文章

Kineticjs 停止渲染

如何在kineticjs中通过json在舞台上绘制图层

在 KineticJS 中移除舞台

KineticJS:如何缩放舞台?

Kineticjs如何在舞台上居中图像并根据浏览器调整大小

KineticJS - 将舞台缩放到视口