【发布时间】:2015-07-07 01:14:02
【问题描述】:
我使用以下脚本来获取鼠标单击坐标处重叠 DIV 元素的列表。
如果不旋转 DIV,则此示例脚本可以正常工作:
http://jsfiddle.net/eyxt2tt1/2/
如果我在 DIV 上 apply a rotation 并且用户单击(在本例中靠近红色标记)
http://jsfiddle.net/eyxt2tt1/3/
脚本将始终返回两个 DIV,而它应该只考虑一个。
我需要知道:
- 如何在我的计算中考虑旋转?
- 您知道更好的方法/替代方案吗?
注意事项:
- 我无法使用 Document.elementFromPoint()
- 它们是关于 SO 的类似问题,但我认为这是一个不同的问题,因为我需要特别解决“轮换问题”。
- 非常感谢您在 jsfiddle 中提出的想法
$(document).click(function (e) {
var hitElements = getHitElements(e);
var output = $('#output');
output.html('');
for (var i = 0; i < hitElements.length; ++i) {
output.html(output.html() + '<br />' + hitElements[i][0].tagName + ' ' + hitElements[i][0].id);
};
});
var getHitElements = function (e) {
var x = e.pageX;
var y = e.pageY;
var hitElements = [];
$(':visible').each(function () {
console.log($(this).attr("id"), $(this).outerWidth());
var offset = $(this).offset();
console.log('+++++++++++++++++++++');
console.log('pageX: ' + x);
console.log('pageY: ' + y);
console.log($(this).attr("id"), $(this).offset());
console.log('+++++++++++++++++++++');
if (offset.left < x && (offset.left + $(this).outerWidth() > x) && (offset.top < y && (offset.top + $(this).outerHeight() > y))) {
console.log('included: ', $(this).attr("id"));
console.log('from 0p far x: ', $(this).attr("id"), offset.left + $(this).outerWidth());
console.log('from 0p far y: ', $(this).attr("id"), offset.top + $(this).outerHeight());
hitElements.push($(this));
}
});
return hitElements;
}
【问题讨论】:
-
我认为您需要获取转换后的左/上值,请参阅此答案stackoverflow.com/questions/11229040/…
-
你需要像 div 区域交叉口那样做 smoething
-
谢谢大家,请查看我的问题的注释,不幸的是我不能使用 document.elementFromPoint(x,y)
标签: javascript jquery html css