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}`