Skip to content

Commit 4955faa

Browse files
committed
Game, Controls – remove listeners before unmount
1 parent 5336bf4 commit 4955faa

File tree

2 files changed

+41
-24
lines changed

2 files changed

+41
-24
lines changed

src/components/Controls.vue

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script setup>
2-
import { inject, onMounted } from 'vue';
2+
import { inject, onBeforeUnmount, onMounted } from 'vue';
33
44
import Joystick from '@/components/Joystick.vue';
55
@@ -10,28 +10,38 @@ const Key = { 87: 'w', 65: 'a', 83: 's', 68: 'd', 16: 'shift' };
1010
const KEYS = Object.keys(Key).map(key => +key);
1111
1212
13+
const _onKeyDown = e => {
14+
if (store.input.hasKey)
15+
e.preventDefault();
16+
17+
if (e.altKey || e.ctrlKey || e.metaKey) return;
18+
if (! KEYS.includes(e.keyCode)) return;
19+
20+
store.input.key[Key[e.keyCode]] = true;
21+
};
22+
const _onKeyUp = e => {
23+
if (store.input.hasKey)
24+
e.preventDefault();
25+
26+
if (! KEYS.includes(e.keyCode)) return;
27+
28+
store.input.key[Key[e.keyCode]] = false;
29+
};
30+
const _onBeforeUnload = e => {
31+
if (store.input.hasKey)
32+
e.preventDefault();
33+
};
34+
35+
1336
onMounted(() => {
14-
window.addEventListener('keydown', e => {
15-
if (store.input.hasKey)
16-
e.preventDefault();
17-
18-
if (e.altKey || e.ctrlKey || e.metaKey) return;
19-
if (! KEYS.includes(e.keyCode)) return;
20-
21-
store.input.key[Key[e.keyCode]] = true;
22-
}, false);
23-
window.addEventListener('keyup', e => {
24-
if (store.input.hasKey)
25-
e.preventDefault();
26-
27-
if (! KEYS.includes(e.keyCode)) return;
28-
29-
store.input.key[Key[e.keyCode]] = false;
30-
}, false);
31-
window.addEventListener('beforeunload', e => {
32-
if (store.input.hasKey)
33-
e.preventDefault();
34-
});
37+
window.addEventListener('keydown', _onKeyDown, false);
38+
window.addEventListener('keyup', _onKeyUp, false);
39+
window.addEventListener('beforeunload', _onBeforeUnload);
40+
});
41+
onBeforeUnmount(() => {
42+
window.removeEventListener('keydown', _onKeyDown, false);
43+
window.removeEventListener('keyup', _onKeyUp, false);
44+
window.removeEventListener('beforeunload', _onBeforeUnload);
3545
});
3646
</script>
3747

src/components/Game.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,13 @@ window.$game = { clock, store, sprite, hitbox };
142142
watch(() => store.isPaused, () => store.isPaused && draw());
143143
144144
145+
const _onBlur = () => isWindowFocussed = false;
146+
const _onFocus = () => isWindowFocussed = true;
147+
148+
145149
onMounted(() => {
146-
window.addEventListener('blur', () => isWindowFocussed = false);
147-
window.addEventListener('focus', () => isWindowFocussed = true);
150+
window.addEventListener('blur', _onBlur);
151+
window.addEventListener('focus', _onFocus);
148152
149153
store.displayTo(document.getElementById('game-display'));
150154
@@ -155,6 +159,9 @@ onMounted(() => {
155159
});
156160
157161
onBeforeUnmount(() => {
162+
window.removeEventListener('blur', _onBlur);
163+
window.removeEventListener('focus', _onFocus);
164+
158165
delete window.$game;
159166
160167
store.reset();

0 commit comments

Comments
 (0)