如何获取父div的offsetX?

时间:2015-05-10 19:33:25

标签: javascript

在这方面已经挣扎了一段时间,所以我决定制作一个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/

如果您点击红色容器上的任意位置,则会抓取offsetXoffsetY。但是,如果您点击图块,则会获取偏移量,这会导致角色无法移动到该位置。

我想要做的是抓住GameWorld's offsetXoffsetY,即使点击了该图块,这可能吗?

查看控制台时,我们可以看到e.target显示用户点击了哪个元素。这是我能得到的尽可能接近,因为当我点击它的父子元素时,我需要找到GameWorld's元素的偏移量。

点击GameWorld's磁贴后,我可以通过访问以下内容访问img节点:

e.path[0],与相关here

相关

可悲的是,这就是我被困住的地方,不知道用节点树抓到什么。

编辑:我不想使用pointer-events,因为它似乎是解决问题的一种简单方法,以及稍后的碰撞检测,它将成为一个问题。

Edit2:警告

我在这些VALUES上使用transform:translate(X,Y)并且它们没有传递给DOM(用于抵消),所以如果有人遇到这种情况,请记得添加top:left:属性让dom赶上补偿和值。

2 个答案:

答案 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

Updated fiddle

答案 1 :(得分:0)

请注意,如果这仍然有问题,您可以根据上下文减去 target.offsetWidth/2target.offsetHeight/2。 (因为 offsetLeft 是从当前元素的中心计算的。)