Skip to content

Commit 7c582ab

Browse files
committed
Add/implement pc.EVENT_MOUSEOUT
1 parent b07a438 commit 7c582ab

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

src/platform/input/constants.js

+7
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ export const EVENT_MOUSEUP = 'mouseup';
5252
*/
5353
export const EVENT_MOUSEWHEEL = 'mousewheel';
5454

55+
/**
56+
* Name of event fired when the mouse moves out or enters another element.
57+
*
58+
* @type {string}
59+
*/
60+
export const EVENT_MOUSEOUT = 'mouseout';
61+
5562
/**
5663
* Name of event fired when a new touch occurs. For example, a finger is placed on the device.
5764
*

src/platform/input/mouse-event.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class MouseEvent {
5050
* @type {number}
5151
*/
5252
this.y = coords.y;
53-
} else if (isMousePointerLocked()) {
53+
} else if (isMousePointerLocked() || event.type === 'mouseout') {
5454
this.x = 0;
5555
this.y = 0;
5656
} else {

src/platform/input/mouse.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { platform } from '../../core/platform.js';
22
import { EventHandler } from '../../core/event-handler.js';
33

4-
import { EVENT_MOUSEDOWN, EVENT_MOUSEMOVE, EVENT_MOUSEUP, EVENT_MOUSEWHEEL } from './constants.js';
4+
import { EVENT_MOUSEDOWN, EVENT_MOUSEMOVE, EVENT_MOUSEOUT, EVENT_MOUSEUP, EVENT_MOUSEWHEEL } from './constants.js';
55
import { isMousePointerLocked, MouseEvent } from './mouse-event.js';
66

77
/**
@@ -36,6 +36,7 @@ class Mouse extends EventHandler {
3636
this._downHandler = this._handleDown.bind(this);
3737
this._moveHandler = this._handleMove.bind(this);
3838
this._wheelHandler = this._handleWheel.bind(this);
39+
this._outHandler = this._handleOut.bind(this);
3940
this._contextMenuHandler = (event) => {
4041
event.preventDefault();
4142
};
@@ -98,6 +99,7 @@ class Mouse extends EventHandler {
9899
window.addEventListener('mouseup', this._upHandler, opts);
99100
window.addEventListener('mousedown', this._downHandler, opts);
100101
window.addEventListener('mousemove', this._moveHandler, opts);
102+
window.addEventListener('mouseout', this._outHandler, opts);
101103
window.addEventListener('wheel', this._wheelHandler, opts);
102104
}
103105

@@ -113,6 +115,7 @@ class Mouse extends EventHandler {
113115
window.removeEventListener('mouseup', this._upHandler, opts);
114116
window.removeEventListener('mousedown', this._downHandler, opts);
115117
window.removeEventListener('mousemove', this._moveHandler, opts);
118+
window.removeEventListener('mouseout', this._outHandler, opts);
116119
window.removeEventListener('wheel', this._wheelHandler, opts);
117120
}
118121

@@ -289,6 +292,13 @@ class Mouse extends EventHandler {
289292
this.fire(EVENT_MOUSEWHEEL, e);
290293
}
291294

295+
_handleOut(event) {
296+
const e = new MouseEvent(this, event);
297+
if (!e.event) return;
298+
299+
this.fire(EVENT_MOUSEOUT, e);
300+
}
301+
292302
_getTargetCoords(event) {
293303
const rect = this._target.getBoundingClientRect();
294304
const left = Math.floor(rect.left);

0 commit comments

Comments
 (0)