我正在尝试制作拖放功能,当我拖动时,我需要找到相对于具有某个类的div的位置。问题是这个div与我拖动的元素重叠。为了解决这个问题,我有一个循环,我只是将每个元素的显示样式设置为none,然后再次使用elementFromPoint。所以像这样:
e = document.elementFromPoint(x, y);
while(!e.hasClass("abc")) {
e.style.display = "none";
e = document.elementFromPoint(x, y);
}
return e;
我面临的问题是,我相信当我将dom元素的显示样式设为无时,窗口会向上移动。我想避免这种情况。还有其他方法可以解决这个问题吗?
我正在尝试使用vanilla javascript编写解决方案。
感谢。
答案 0 :(得分:2)
oslego 的gist显示了解决方案。
//
// returns a list of all elements under the cursor
//
function elementsFromPoint(x,y) {
var elements = [], previousPointerEvents = [], current, i, d;
// get all elements via elementFromPoint, and remove them from hit-testing in order
while ((current = document.elementFromPoint(x,y)) && elements.indexOf(current)===-1 && current != null) {
// push the element and its current style
elements.push(current);
previousPointerEvents.push({
value: current.style.getPropertyValue('pointer-events'),
priority: current.style.getPropertyPriority('pointer-events')
});
// add "pointer-events: none", to get to the underlying element
current.style.setProperty('pointer-events', 'none', 'important');
}
// restore the previous pointer-events values
for(i = previousPointerEvents.length; d=previousPointerEvents[--i]; ) {
elements[i].style.setProperty('pointer-events', d.value?d.value:'', d.priority);
}
// return our results
return elements;
}
您可以修改该功能,使其完全符合您的要求,也可以在返回的数组中搜索符合条件的元素。
答案 1 :(得分:1)
好吧,你可以尝试使用
e.style.visibility = 'hidden';
而不是
e.style.display = "none";
这样,元素就会从视图中隐藏,但它仍占用布局中的空间。我认为这对你有用。