implemented the play any offset feature

This commit is contained in:
Yanzhen Yu
2018-10-18 16:24:01 +08:00
parent 8186f05e1c
commit 6c8cf5c379
4 changed files with 68 additions and 36 deletions

View File

@@ -1,16 +1,27 @@
import { playerConfig } from '../types';
const FRAME_MS = 16;
let _id = 1;
const timerMap: Map<number, boolean> = new Map();
export function later(cb: () => void, delayMs: number, speed = 1): number {
export function later(
cb: () => void,
delayMs: number,
config: playerConfig,
): number {
const now = performance.now();
const id = timerMap.size + 1;
let lastStep = now;
const id = _id++;
timerMap.set(id, true);
function check(step: number) {
if (!timerMap.has(id)) {
return;
}
if (step - now > delayMs / speed - FRAME_MS) {
const stepDiff = step - lastStep;
lastStep = step;
delayMs -= config.speed * stepDiff;
if (delayMs < FRAME_MS) {
cb();
clear(id);
} else {