【发布时间】:2018-05-28 04:10:35
【问题描述】:
我有一个“target-circle”组件,它是一个简单的圆圈,外面有一个环。我正在尝试为 entire 组件获取 mouseenter 和 mouseleave 事件,但是附加到 parent 元素的事件侦听器会为子实体触发,并且仅在光线投射器击中某些东西时触发.
我尝试了各种方法来放置不可见的命中测试圈/环来尝试缓解问题,但它们都有一个核心问题,即为子实体触发多个进入/离开事件。
是否可行/仅获取进入/离开整个父实体的事件的最佳方式是什么?
演示: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。然后当您进入空白区域或内圈时没有任何事件,如果您退出外黑圈到场景的其余部分,最后是鼠标离开。谢谢! :)
-
使用指针事件:无;子元素的 CSS 属性
标签: javascript aframe