diff --git a/site/content/tutorial/06-bindings/10-media-elements/app-a/App.svelte b/site/content/tutorial/06-bindings/10-media-elements/app-a/App.svelte index 005652ff21..241e0993b6 100644 --- a/site/content/tutorial/06-bindings/10-media-elements/app-a/App.svelte +++ b/site/content/tutorial/06-bindings/10-media-elements/app-a/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); } - 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 + function handleMousedown(e) { + 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 @@ @@ -125,4 +125,4 @@ video { width: 100%; } - \ No newline at end of file + diff --git a/site/content/tutorial/06-bindings/10-media-elements/app-b/App.svelte b/site/content/tutorial/06-bindings/10-media-elements/app-b/App.svelte index 63e6cd7e21..22e64f1583 100644 --- a/site/content/tutorial/06-bindings/10-media-elements/app-b/App.svelte +++ b/site/content/tutorial/06-bindings/10-media-elements/app-b/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); } - 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 + function handleMousedown(e) { + 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 @@ ``` > `bind:duration` is equivalent to `bind:duration={duration}`