将鼠标事件限制为 Pixi.js 容器

Sal*_*rbu 4 javascript canvas pixi.js

我正在使用Pixi JS并通过一个简单的事件处理程序检测鼠标位置:

...

var stage = new PIXI.Container();
stage.interactive = true;

var handler = function(e){
  mouseX = renderer.plugins.interaction.mouse.global.x;
  mouseY = renderer.plugins.interaction.mouse.global.y;
}

stage.on("pointermove", handler);

...
Run Code Online (Sandbox Code Playgroud)

但是,当鼠标位于舞台边界(页面上的元素)之外时,mouseX和会被更新。是否可以将活动限制在舞台内?mouseY<canvas>mousemove

我已经尝试过stage.hitArea,但没有成功。

ema*_*nek 5

这似乎是预期的行为;即使鼠标指针位于容器之外,也需要调用 mousemove 回调来实现某些操作,例如拖放。

mouseover但是您可以使用以下事件来跟踪指针是否位于对象上方mouseout

...
var graphics = new PIXI.Graphics();
graphics.hitArea = new PIXI.Rectangle(0, 0, 100, 100);
graphics.interactive = true;
stage.addChild(graphics);
...

var mouseIn = false;
graphics.on("mouseover", function(e) {
  console.log("over")
  mouseIn = true;
});

graphics.on("mouseout", function(e) {
  console.log("out");
  mouseIn = false;
});

graphics.on("mousemove",function(e) {
  if (mouseIn) {
    console.log("mouse move inside", e)
  }
});
Run Code Online (Sandbox Code Playgroud)

(注意:我无法在舞台对象上mouseout触发mouseover事件 - 但显然您应该只将子元素添加到舞台并与它们交互。此外,这hitArea是必要的。)

这个 JSFiddle 应该演示这个想法,请参阅控制台输出: http://jsfiddle.net/qc73ufbh/

这似乎确实是功能而不是错误,请查看有关此主题的这些已关闭问题: https: //github.com/pixijs/pixi.js/issues/2310https://github.com/pixijs/pixi.js /问题/1250