Changeset 9a22776 in Klonkt for src/assets/js/mod/read.js
- Timestamp:
- 08/24/2026 09:02:23 AM (2 weeks ago)
- Branches:
- main
- Children:
- d7d2ede
- Parents:
- cd7d7d8
- File:
-
- 1 edited
-
src/assets/js/mod/read.js (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/read.js
rcd7d7d8 r9a22776 252 252 const RUST_MS = 120; 253 253 254 /**255 * DE PROEF: op mobiel het NATIVE snappen terug (24-8).256 *257 * De vraag die deze vlag beantwoordt is er precies een: houdt de browser zich258 * aan `scroll-snap-stop: always`? Die eigenschap zegt dat een uitloop nooit259 * over een snappunt heen mag vliegen -- en dat is woord voor woord Robins regel260 * ("ook al zou het target voorbijgescrolld worden, alsnog op het target261 * landen"), maar dan uitgevoerd door het toestel met zijn eigen momentumcurve262 * in plaats van door onze nabootsing ervan in JavaScript.263 *264 * Dat overvliegen was destijds de reden om Lenis er op mobiel bij te halen. De265 * eigenschap is toen nooit geprobeerd: hij stond op `normal`, en dan ook nog op266 * .read-post -- een element dat door scroll-snap-align:none helemaal geen267 * snappunt is. Het ankertje dat het snappunt WEL is had hem niet.268 *269 * ACHTER EEN VLAG, want de Lenis-kant blijft staan tot deze proef gewonnen is.270 * Wint hij, dan kan Lenis van de telefoon af en verdwijnen daarmee ook de vier271 * routes waarlangs de native scroll het gebaar nu soms overneemt. Verliest hij,272 * dan hebben we dat geweten voordat er iets weg was.273 *274 * ?nativesnap=1 zet hem aan, ?nativesnap=0 weer uit. De keuze blijft staan275 * zolang het tabblad open is, want een htmx-navigatie gooit de queryreeks weg276 * en dan zou de proef na een klik voorbij zijn.277 */278 function nativeSnap() {279 try {280 const q = new URLSearchParams(location.search).get('nativesnap');281 if (q === '1') sessionStorage.setItem('klonkt:native-snap', '1');282 if (q === '0') sessionStorage.removeItem('klonkt:native-snap');283 return sessionStorage.getItem('klonkt:native-snap') === '1';284 } catch (e) {285 return false; // privémodus zonder opslag: gewoon de gewone weg286 }287 }288 289 254 let bezig = false; // loopt er een gebaar of een uitloop? 290 255 let ooitGescrold = false; // snappen begint UIT, zie zetSnappen() … … 340 305 // zijn snap heeft zijn scroll-gebeurtenissen nodig om te kunnen timen. 341 306 if (lenis || !(OP_DESKTOP.matches || OP_TOUCH.matches)) return; 342 // Staat de proef aan, dan blijft Lenis van de telefoon af en doet de browser343 // het snappen zelf. Desktop merkt hier niets van: daar is OP_TOUCH onwaar.344 if (OP_TOUCH.matches && nativeSnap()) return;345 307 const [L, S] = await Promise.all([ 346 308 import(`/assets/vendor/lenis.mjs?v=${VENDOR_V}`), … … 581 543 // eerste gebaar naar beneden zet hem aan. 582 544 const el = document.documentElement; 583 // EXPLICIET 'y proximity', geen lege waarde. Leeg betekent "val terug op de 584 // stylesheet", en die zet het snappen op mobiel juist UIT (de mediaquery bij 585 // .read-post, want twee snapsystemen op dezelfde scroller vechten). Zolang 586 // Lenis daar draaide klopte dat; zonder Lenis zou het snappen dan nooit meer 587 // aangaan en zou de proef niets kunnen bewijzen. 588 // Op desktop verandert er niets: dit is exact wat de stylesheet daar geeft. 589 const wil = aan ? 'y proximity' : 'none'; 545 const wil = aan ? '' : 'none'; 590 546 if (el.style.scrollSnapType !== wil) el.style.scrollSnapType = wil; 591 547 } … … 643 599 document.querySelectorAll('[data-lenis-prevent].read-post') 644 600 .forEach((a) => a.removeAttribute('data-lenis-prevent')); 645 646 // DE VLAG WORDT HIER GELEZEN, op elke pagina en in elke weergave, en niet pas647 // in startLenis(). Anders zit er een val in: land je in Grid, dan draait648 // startLenis() helemaal niet, wordt ?nativesnap=1 nergens opgeschreven, en is649 // de queryreeks weg zodra je op Lezen tikt. De proef gaat dan stilzwijgend650 // niet door en je beoordeelt Lenis terwijl je denkt dat je de browser651 // beoordeelt. Gemeten op dev: weergave 'grid', vlag null.652 // Dit mag boven de terugval hieronder staan omdat de module op elke pagina653 // draait (data-js is "chrome read tape"), ook waar geen leesstroom is.654 nativeSnap();655 601 656 602 const s = document.getElementById('read-stream');
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)