我有一个“目标圆”组件,它是一个带圆环的简单圆圈。我试图为整个组件获取mouseenter和mouseleave事件,但附属于父级元素的事件侦听器会为子实体触发元素,并且只有在raycaster点击某个元素时触发。A框架:mouseenter/mouseleave仅适用于父实体
我试图用各种方法将隐形命中测试圈/戒指放在试图缓解问题的位置,但它们都有多个进入/离开事件触发子实体的核心问题。
它是可行的/什么是最好的方式来获得进入/离开整个父实体的事件?
演示:https://output.jsbin.com/tucuxas/quiet
<!DOCTYPE html>
<html>
<head>
<script src="https://aframe.io/releases/0.6.0/aframe.min.js"></script>
<script>
AFRAME.registerComponent('target-circle', {
schema: {
position: {type: 'vec3', default: {x: 0, y: 0, z: 0}}
},
init: function() {
var el = this.el;
el.setAttribute('position', this.data.position);
el.object3D.lookAt(new THREE.Vector3(0, 0, 0));
var outerRing = document.createElement('a-entity');
outerRing.setAttribute('class', 'outerRing');
outerRing.setAttribute('material', {
color: 'black'
});
outerRing.setAttribute('geometry', {
primitive: 'ring',
radiusInner: '1.2',
radiusOuter: '1.4'
});
var innerCircle = document.createElement('a-entity');
innerCircle.setAttribute('class', 'innerCircle');
innerCircle.setAttribute('material', {
color: 'black'
});
innerCircle.setAttribute('geometry', {
primitive: 'circle',
radius: '0.3'
});
el.appendChild(outerRing);
el.appendChild(innerCircle);
el.addEventListener('mouseenter', function() {
console.log('mouseenter');
});
el.addEventListener('mouseleave', function() {
console.log('mouseleave');
});
}
});
</script>
</head>
<body>
<a-scene>
<a-entity target-circle='position: 0 3 -10'></a-entity>
<a-entity camera look-controls>
<a-entity id="cursor" cursor="fuse: false;" material="color: black; shader: flat;"
position="0 0 -1"
geometry="primitive: ring; radiusInner: 0.001; radiusOuter: .005; "></a-entity>
</a-entity>
</a-scene>
</body>
</html>
你想要的mouseenter /留给环内工作的空白区域? –
我希望它能够在整个组件上工作,以便在光标通过外部黑色环时获得一个鼠标中心。然后,当你进入空白区域或内圈时没有任何事件发生,如果你将外部黑圈退出到场景的其余部分,则最后会有一个鼠标轮。谢谢! :) – Stephen
使用pointer-events:none;子元素的CSS属性 – SamB