-
Notifications
You must be signed in to change notification settings - Fork 135
Expand file tree
/
Copy pathcontrols.ts
More file actions
58 lines (49 loc) · 2.24 KB
/
controls.ts
File metadata and controls
58 lines (49 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import * as core from '@diffusionstudio/core';
import { render } from './render';
export function setupControls(composition: core.Composition) {
const handlePlay = () => composition.play();
const handlePause = () => composition.pause();
const handleBack = () => composition.seek(0);
const handleForward = () => composition.seek(composition.duration);
const handleExport = () => render(composition);
playButton.addEventListener('click', handlePlay);
pauseButton.addEventListener('click', handlePause);
backButton.addEventListener('click', handleBack);
forwardButton.addEventListener('click', handleForward);
exportButton.addEventListener('click', handleExport);
composition.on('playback:start', () => {
playButton.style.display = 'none';
pauseButton.style.display = 'block';
});
composition.on('playback:end', () => {
pauseButton.style.display = 'none';
playButton.style.display = 'block';
});
composition.on('playback:time', () => {
time.textContent = composition.time();
});
composition.mount(player);
const handleResize = () => {
const scale = Math.min(
container.clientWidth / composition.width,
container.clientHeight / composition.height
);
player.style.width = `${composition.width}px`;
player.style.height = `${composition.height}px`;
player.style.transform = `scale(${scale})`;
player.style.transformOrigin = 'center';
}
const observer = new ResizeObserver(handleResize);
observer.observe(document.body);
composition.on('resize', handleResize);
time.textContent = composition.time();
composition.seek(0);
}
const container = document.querySelector('[id="player-container"]') as HTMLDivElement;
const player = document.querySelector('[id="player"]') as HTMLDivElement;
const time = document.querySelector('[id="time"]') as HTMLSpanElement;
const exportButton = document.querySelector('[id="export"]') as HTMLButtonElement;
const playButton = document.querySelector('[data-lucide="play"]') as HTMLElement;
const pauseButton = document.querySelector('[data-lucide="pause"]') as HTMLElement;
const backButton = document.querySelector('[data-lucide="skip-back"]') as HTMLElement;
const forwardButton = document.querySelector('[data-lucide="skip-forward"]') as HTMLElement;