javascript / expert
Snippet
Polymorphe Zustandsautomaten-Controller an Svelte-Knoten-Aktionen
Die Verwendung objektorientierter Zustandsvererbung in Svelte-DOM-Aktionen kapselt Event-Handler-Verzweigungen in polymorphe Klassen und ersetzt monolithische Switch-Blöcke.
snippet.js
javascript
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
export class BaseActionState {constructor(node) { this.node = node; }handlePointerDown(e) { return this; }handlePointerMove(e) { return this; }destroy() {}}export class IdleState extends BaseActionState {handlePointerDown(e) {this.node.style.borderColor = '#0055ff';return new DraggingState(this.node);}}export class DraggingState extends BaseActionState {handlePointerMove(e) {this.node.style.transform = `translate(${e.clientX}px, ${e.clientY}px)`;return this;}}export function statefulAction(node) {let current = new IdleState(node);const onDown = (e) => { current = current.handlePointerDown(e) || current; };const onMove = (e) => { current = current.handlePointerMove(e) || current; };node.addEventListener('pointerdown', onDown);window.addEventListener('pointermove', onMove);return {destroy() {current.destroy();node.removeEventListener('pointerdown', onDown);window.removeEventListener('pointermove', onMove);}};}
svelte
Erklärung
1
export class BaseActionState {
Abstrakte Basisklasse für Interaktionszustände am DOM-Knoten.
2
return new DraggingState(this.node);
Führt Zustandsübergang aus durch Rückgabe einer neuen Zustandsinstanz als aktiver Controller.
3
current = current.handlePointerDown(e) || current;
Delegiert Event-Verarbeitung polymorph an das aktuelle Zustandsobjekt.