mirror of https://github.com/sveltejs/svelte
parent
d6023309ec
commit
e8e42a7c95
@ -1,53 +1,41 @@
|
|||||||
<script>
|
<!-- https://eugenkiss.github.io/7guis/tasks#timer -->
|
||||||
import { onDestroy, onMount } from 'svelte';
|
|
||||||
|
|
||||||
// [svelte-upgrade suggestion]
|
<script>
|
||||||
// manually refactor all references to __this
|
import { onDestroy } from 'svelte';
|
||||||
const __this = {};
|
|
||||||
|
|
||||||
export let elapsed = 0;
|
let elapsed = 0;
|
||||||
export let duration = 5000;
|
let duration = 5000;
|
||||||
export let start;
|
|
||||||
|
|
||||||
onMount(() => {
|
let last_time = window.performance.now();
|
||||||
reset();
|
let frame;
|
||||||
|
|
||||||
const update = () => {
|
(function update() {
|
||||||
__this.frame = requestAnimationFrame(update);
|
frame = requestAnimationFrame(update);
|
||||||
const elapsed = window.performance.now() - start;
|
|
||||||
|
|
||||||
if (elapsed > duration) return;
|
const time = window.performance.now();
|
||||||
|
elapsed += Math.min(
|
||||||
|
time - last_time,
|
||||||
|
duration - elapsed
|
||||||
|
);
|
||||||
|
|
||||||
elapsed = elapsed;
|
last_time = time;
|
||||||
};
|
}());
|
||||||
|
|
||||||
update();
|
|
||||||
});
|
|
||||||
|
|
||||||
onDestroy(() => {
|
onDestroy(() => {
|
||||||
if (__this.frame) {
|
cancelAnimationFrame(frame);
|
||||||
cancelAnimationFrame(__this.frame);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// [svelte-upgrade suggestion]
|
|
||||||
// review these functions and remove unnecessary 'export' keywords
|
|
||||||
export function reset() {
|
|
||||||
start = window.performance.now();
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- https://github.com/eugenkiss/7guis/wiki#timer -->
|
|
||||||
<label>
|
<label>
|
||||||
elapsed time:
|
elapsed time:
|
||||||
<progress value='{elapsed / duration}'></progress>
|
<progress value="{elapsed / duration}"></progress>
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<div>{(elapsed / 1000).toFixed(1)}s</div>
|
<div>{(elapsed / 1000).toFixed(1)}s</div>
|
||||||
|
|
||||||
<label>
|
<label>
|
||||||
duration:
|
duration:
|
||||||
<input type='range' bind:value='duration' min='1' max='20000'>
|
<input type="range" bind:value={duration} min="1" max="20000">
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<button on:click='{reset}'>reset</button>
|
<button on:click="{() => elapsed = 0}">reset</button>
|
Loading…
Reference in new issue