[英]I would like to know how to rotate around Z-axis of a mesh created with THREE.JS using the mouse
[英]Javascript: Know all the elements under your mouse pointer (multiple z-axis layers)
所以有一个非常酷的小提琴,它允许您获取指针下的元素:
$(window).click(function(e) {
var x = e.clientX, y = e.clientY,
elementMouseIsOver = document.elementFromPoint(x, y);
alert(elementMouseIsOver);
})
我有多个 z 轴图层,我想知道我的指针下的所有元素。
有什么建议吗?
只需查看每个元素,直到到达 html 标记。 您可以隐藏/显示元素或为此使用 pointerEvents:
$(window).click(function(e) {
var x = e.clientX,
y = e.clientY,
stack = [],
elementMouseIsOver = document.elementFromPoint(x, y);
stack.push(elementMouseIsOver);
while (elementMouseIsOver.tagName !== 'HTML'){
elementMouseIsOver.style.pointerEvents = 'none';
elementMouseIsOver = document.elementFromPoint(x, y);
stack.push(elementMouseIsOver);
}
/* Now clean it up */
var i = 0,
il = stack.length;
for (; i < il; i += 1) {
stack[i].style.pointerEvents = '';
}
console.log(stack);
});
连同这个css样式:
.pointerEventsNone {
pointer-events: none;
}
使用 classList 添加/删除指针事件属性更优雅:如本小提琴及以下所示:
function elementsAtLocation (x,y){
var stack= [], el;
do {
el = document.elementFromPoint(x, y);
stack.push(el);
el.classList.add('pointerEventsNone');
}while(el.tagName !== 'HTML');
// clean up
for(var i = 0; i < stack.length; i += 1)
stack[i].classList.remove('pointerEventsNone');
return stack;
}
旧浏览器:对旧浏览器使用 display:none,但这会触发重绘/回流: http : //jsfiddle.net/Gwy2u/2/
还有另一种选择
$(window).click(function(e) {
var x = e.clientX,
y = e.clientY,
stack = [];
var allElements = document.getElementsByTagName('*');
var len = allElements.length;
for (var i = 0; i < len; i++) {
var elm = allElements[i];
var rect = elm.getBoundingClientRect();
if(y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right){
stack.push(elm);
}
}
console.log(stack);
});
示例链接: http : //jsfiddle.net/Gwy2u/41/
也许你可以试试
const elements = document.elementsFromPoint(x, y);
https://developer.mozilla.org/en-US/docs/Web/API/DocumentOrShadowRoot/elementsFromPoint
根据描述,DocumentOrShadowRoot 接口的 elementsFromPoint() 方法返回指定坐标(相对于视口)的所有元素的数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.