Changeset c0e463b in Klonkt for src/assets/js/mod/tape.js
- Timestamp:
- 08/22/2026 11:05:19 AM (3 weeks ago)
- Branches:
- main
- Children:
- 5e72413
- Parents:
- 4fbe2c1
- File:
-
- 1 edited
-
src/assets/js/mod/tape.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/tape.js
r4fbe2c1 rc0e463b 14 14 * die tijdlijn. Vandaar seekBy() en niet next()/prev() -- springen per nummer 15 15 * is een playlistgebaar, en dan is dit een lijst met een cassetteplaatje. 16 * 17 * DE SPOELLUS STAAT IN DE SPELER, niet hier: sinds de speler onderin dezelfde 18 * spoelknoppen heeft zou dezelfde versnelling op twee plekken staan. Deze 19 * module bedient hem en tekent het jasje. 16 20 * 17 21 * WAAROM ER GEPOLLD WORDT. audio-player.js zendt geen gebeurtenissen uit -- het … … 56 60 tape.classList.toggle('is-playing', draait); 57 61 tape.classList.toggle('is-loaded', i >= 0); 62 // Spoelt de SPELER (bijvoorbeeld via zijn eigen knoppen onderin), dan hoort 63 // deze cassette dat ook te laten zien. 64 const windt = i >= 0 && !!p && p.isWinding && p.isWinding(); 65 if (!windt) tape.classList.remove('is-winding', 'is-winding-back'); 66 else tape.classList.add('is-winding'); 58 67 59 68 const knop = tape.querySelector('[data-tape-play]'); … … 91 100 * schermlezer, want vasthouden is met een spatiebalk geen gebaar. 92 101 */ 93 const START_SNELHEID = 4; // maal de normale snelheid bij het indrukken94 const MAX_SNELHEID = 16;95 const VERSNELLING = 1.35; // per stap96 const STAP_MS = 120;97 102 const TIK_STAP_S = 5; // een losse klik 98 103 99 let winder = null;100 101 104 function stopWinden(tape) { 102 if (winder) { clearInterval(winder.timer); winder = null; } 105 const p = speler(); 106 if (p && p.stopWind) p.stopWind(); 103 107 if (tape) tape.classList.remove('is-winding', 'is-winding-back'); 104 108 } … … 106 110 function startWinden(tape, richting) { 107 111 const p = speler(); 108 if (!p || huidigeIndex(tape) < 0) return; 109 stopWinden(tape); 110 let snelheid = START_SNELHEID; 111 let vorigePositie = null; 112 let stil = 0; 112 if (!p || !p.startWind || huidigeIndex(tape) < 0) return; 113 // DE LUS STAAT IN DE SPELER. Hij stond hier, en toen kreeg de speler zelf ook 114 // spoelknoppen -- twee kopieen van dezelfde versnelling die uit elkaar lopen 115 // zodra iemand aan een getal draait. Deze module zet alleen nog het jasje: 116 // welke spoelen draaien en hoe hard. 117 p.startWind(richting); 113 118 tape.classList.add('is-winding'); 114 119 if (richting < 0) tape.classList.add('is-winding-back'); 115 const timer = setInterval(() => {116 snelheid = Math.min(MAX_SNELHEID, snelheid * VERSNELLING);117 p.seekBy(richting * snelheid * (STAP_MS / 1000));118 tekenBand(tape);119 // AAN HET EIND VAN DE BAND STOPPEN MET SPOELEN. De speler klemt de positie120 // af, dus daar gebeurt niets meer -- maar de spoelen bleven wel doordraaien121 // en de knop bleef oplichten, alsof er nog band was. Beweegt de teller twee122 // rondes niet, dan zijn we bij de kop of de staart.123 const nu = p.tapeTijden ? p.tapeTijden().cur : null;124 if (nu !== null && vorigePositie !== null && Math.abs(nu - vorigePositie) < 0.05) {125 if (++stil >= 2) { stopWinden(tape); return; }126 } else stil = 0;127 vorigePositie = nu;128 }, STAP_MS);129 winder = { timer, tape };130 120 } 131 121
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)