diff --git a/frontend/src/composables/useEinstellungen.js b/frontend/src/composables/useEinstellungen.js index b3aac5c..8eb8a4c 100644 --- a/frontend/src/composables/useEinstellungen.js +++ b/frontend/src/composables/useEinstellungen.js @@ -121,19 +121,63 @@ export function useEinstellungen() { return true } - async function tastatur(e) { + async function umschalten() { + if (freigeschaltet.value) anzeige.value = !anzeige.value + // Ohne Host-Film kommt man so rein; lehnt der Server ab, gibt es einen + else if (!(await hostAnmelden(null))) hostLogin.value = true + } + + function tastatur(e) { // e.code statt e.key: mit drei Zusatztasten liefert das Layout sonst // je nach System ein anderes Zeichen if (e.ctrlKey && e.shiftKey && e.altKey && e.code === 'KeyS') { e.preventDefault() - if (freigeschaltet.value) anzeige.value = !anzeige.value - // Ohne Host-Film kommt man so rein; lehnt der Server ab, gibt es einen - else if (!(await hostAnmelden(null))) hostLogin.value = true + umschalten() } } - onMounted(() => window.addEventListener('keydown', tastatur)) - onUnmounted(() => window.removeEventListener('keydown', tastatur)) + // Am Handy gibt es keine Tastenkombination: fünf Sekunden mit einem + // Finger den Bildschirm halten tut dasselbe + const DRUCK_MS = 5000 + let druck = null + let druckStart = null + + function fingerAb() { + clearTimeout(druck) + druck = null + } + + function fingerAuf(e) { + fingerAb() + if (e.touches.length !== 1) return + druckStart = { x: e.touches[0].clientX, y: e.touches[0].clientY } + druck = setTimeout(umschalten, DRUCK_MS) + } + + function fingerBewegt(e) { + if (!druck) return + const t = e.touches[0] + // Ein bisschen Zittern ist kein Wischen + if (Math.hypot(t.clientX - druckStart.x, t.clientY - druckStart.y) > 15) fingerAb() + } + + const finger = { + touchstart: fingerAuf, + touchmove: fingerBewegt, + touchend: fingerAb, + touchcancel: fingerAb, + } + + onMounted(() => { + window.addEventListener('keydown', tastatur) + for (const [ev, fn] of Object.entries(finger)) + window.addEventListener(ev, fn, { passive: true }) + }) + onUnmounted(() => { + window.removeEventListener('keydown', tastatur) + for (const [ev, fn] of Object.entries(finger)) window.removeEventListener(ev, fn) + fingerAb() + }) return { ansicht, ohneGesehene, activeTab, quelle, suchArt, host, hostLogin, hostAnmelden } }