Changeset aaa700e in Klonkt for src/assets/js/mod/read.js
- Timestamp:
- 08/24/2026 08:29:13 AM (2 weeks ago)
- Branches:
- main
- Children:
- a1882e5
- Parents:
- 7b03c35
- File:
-
- 1 edited
-
src/assets/js/mod/read.js (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/read.js
r7b03c35 raaa700e 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 zich 258 * aan `scroll-snap-stop: always`? Die eigenschap zegt dat een uitloop nooit 259 * over een snappunt heen mag vliegen -- en dat is woord voor woord Robins regel 260 * ("ook al zou het target voorbijgescrolld worden, alsnog op het target 261 * landen"), maar dan uitgevoerd door het toestel met zijn eigen momentumcurve 262 * 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. De 265 * eigenschap is toen nooit geprobeerd: hij stond op `normal`, en dan ook nog op 266 * .read-post -- een element dat door scroll-snap-align:none helemaal geen 267 * 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 vier 271 * 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 staan 275 * zolang het tabblad open is, want een htmx-navigatie gooit de queryreeks weg 276 * 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 weg 286 } 287 } 288 254 289 let bezig = false; // loopt er een gebaar of een uitloop? 255 290 let ooitGescrold = false; // snappen begint UIT, zie zetSnappen() … … 305 340 // zijn snap heeft zijn scroll-gebeurtenissen nodig om te kunnen timen. 306 341 if (lenis || !(OP_DESKTOP.matches || OP_TOUCH.matches)) return; 342 // Staat de proef aan, dan blijft Lenis van de telefoon af en doet de browser 343 // het snappen zelf. Desktop merkt hier niets van: daar is OP_TOUCH onwaar. 344 if (OP_TOUCH.matches && nativeSnap()) return; 307 345 const [L, S] = await Promise.all([ 308 346 import(`/assets/vendor/lenis.mjs?v=${VENDOR_V}`), … … 543 581 // eerste gebaar naar beneden zet hem aan. 544 582 const el = document.documentElement; 545 const wil = aan ? '' : 'none'; 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'; 546 590 if (el.style.scrollSnapType !== wil) el.style.scrollSnapType = wil; 547 591 }
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)