在这方面已经挣扎了一段时间,所以我决定制作一个jsfiddle来展示一个例子:
gameworld = document.getElementById('GameWorld');
character = document.getElementById('c');
gameworld.addEventListener('click', function(e){
console.log(e);
character.style.left=''+e.offsetX+'px';
character.style.top=''+e.offsetY+'px';
});
在这里小提琴:http://jsfiddle.net/g43nxhcw/1/
如果您点击红色容器上的任意位置,则会抓取offsetX
和offsetY
。但是,如果您点击图块,则会获取其偏移量,这会导致角色无法移动到该位置。
我想要做的是抓住GameWorld's
offsetX
和offsetY
,即使点击了该图块,这可能吗?
查看控制台时,我们可以看到e.target
显示用户点击了哪个元素。这是我能得到的尽可能接近,因为当我点击它的父子元素时,我需要找到GameWorld's
元素的偏移量。
点击GameWorld's
磁贴后,我可以通过访问以下内容访问img
节点:
e.path[0]
,与相关here
可悲的是,这就是我被困住的地方,不知道用节点树抓到什么。
编辑:我不想使用pointer-events
,因为它似乎是解决问题的一种简单方法,以及稍后的碰撞检测,它将成为一个问题。
我在这些VALUES上使用transform:translate(X,Y)
并且它们没有传递给DOM(用于抵消),所以如果有人遇到这种情况,请记得添加top:
和left:
属性让dom赶上补偿和值。
答案 0 :(得分:1)
您可以添加孩子的struct Sample
{
std::function<void()> callback;
void emit_callback ()
{
callback ();
}
}
void callback(Sample* object)
{
delete object;
}
/////////////////////////////////////////////
Sample* object = new Sample();
object->callback = std::bind(&callback, object);
object->emit_callback ();
和offsetLeft
属性。任意深度(看起来更清晰):
offsetTop
答案 1 :(得分:0)
请注意,如果这仍然有问题,您可以根据上下文减去 target.offsetWidth/2
或 target.offsetHeight/2
。 (因为 offsetLeft
是从当前元素的中心计算的。)