Der beste Weg, dies zu tun, ist wahrscheinlich das DOM Event-Handling zu verwenden.
Angenommen, Sie eine dom-Struktur wie diese:
<div class="container">
<canvas class="threejs-canvas"></canvas>
<div class="some-overlay"></div>
</div>
Und Sie wollen Interaktionen in .some-overlay
nicht auf der three.js Szene in dem Leinwand-Elemente einen Effekt haben, müssen Sie zwei Dinge tun :
- die Raycaster nur Ereignisse verwenden sollten, die auf den
.container
-elementigen
- Klicks innerhalb der Overlay passieren müssen
stopPropagation()
verwenden, um Ereignisse zu der von sprudeln zu stoppen var container = document.querySelector('.container');
var overlay = document.querySelector('.some-overlay');
container.addEventListener('click', function() {
// do raycasting here
});
overlay.addEventListener('click', function(ev) {
ev.stopPropagation(); // prevent event from bubbling up to .container
// ...do whatever you like
});
Es wird noch einfacher, wenn Sie für die Ereignisse für die Raycaster auf der Leinwand-Element selbst hören: Behälter
Also, zusammen so etwas wie dies sein könnte. In diesem Fall werden die Ereignisse niemals das Canvas-Element erreichen und Sie müssen nichts Besonderes tun.