From ecc3c08999f12a68fe26b93a3109c3cc2a708f27 Mon Sep 17 00:00:00 2001 From: Joakim Berglund Date: Fri, 2 Jul 2021 17:20:44 +0200 Subject: [PATCH] Trackpad and touch support in media example (#5912) --- .../05-bindings/09-media-elements/App.svelte | 34 +++++++++--------- .../10-media-elements/app-a/App.svelte | 36 +++++++++---------- .../10-media-elements/app-b/App.svelte | 34 +++++++++--------- .../06-bindings/10-media-elements/text.md | 9 +++-- 4 files changed, 58 insertions(+), 55 deletions(-) diff --git a/site/content/examples/05-bindings/09-media-elements/App.svelte b/site/content/examples/05-bindings/09-media-elements/App.svelte index 5aad9a0fae..b4c5907f6d 100644 --- a/site/content/examples/05-bindings/09-media-elements/App.svelte +++ b/site/content/examples/05-bindings/09-media-elements/App.svelte @@ -7,37 +7,35 @@ let showControls = true; let showControlsTimeout; - function handleMousemove(e) { + // Used to track time of last mouse down event + let lastMouseDown; + + function handleMove(e) { // Make the controls visible, but fade out after // 2.5 seconds of inactivity clearTimeout(showControlsTimeout); showControlsTimeout = setTimeout(() => showControls = false, 2500); showControls = true; - if (!(e.buttons & 1)) return; // mouse not down if (!duration) return; // video not loaded yet + if (e.type !== 'touchmove' && !(e.buttons & 1)) return; // mouse not down + const clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX; const { left, right } = this.getBoundingClientRect(); - time = duration * (e.clientX - left) / (right - left); + time = duration * (clientX - left) / (right - left); } + // we can't rely on the built-in click event, because it fires + // after a drag — we have to listen for clicks ourselves function handleMousedown(e) { - // we can't rely on the built-in click event, because it fires - // after a drag — we have to listen for clicks ourselves + lastMouseDown = new Date(); + } - function handleMouseup() { + function handleMouseup(e) { + if (new Date() - lastMouseDown < 300) { if (paused) e.target.play(); else e.target.pause(); - cancel(); - } - - function cancel() { - e.target.removeEventListener('mouseup', handleMouseup); } - - e.target.addEventListener('mouseup', handleMouseup); - - setTimeout(cancel, 200); } function format(seconds) { @@ -58,8 +56,10 @@