Changeset aaa700e in Klonkt
- Timestamp:
- 08/24/2026 08:29:13 AM (2 weeks ago)
- Branches:
- main
- Children:
- a1882e5
- Parents:
- 7b03c35
- Location:
- src
- Files:
-
- 3 edited
-
assets/css/style.css (modified) (1 diff)
-
assets/js/mod/read.js (modified) (3 diffs)
-
views/shell.ejs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/css/style.css
r7b03c35 raaa700e 2548 2548 2rem naar 4rem, dus deze ook. */ 2549 2549 scroll-margin-top: 4rem; 2550 /* NOOIT OVER EEN GRENS HEEN VLIEGEN. Dit is de regel van 24-8 -- "ook al 2551 zou het target voorbijgescrolld worden, alsnog op het target landen" -- 2552 maar dan als eigenschap in plaats van als JavaScript: de browser mag een 2553 uitloop niet over dit snappunt heen laten gaan, hoe hard je ook veegt. 2554 Een veeg komt daarmee altijd precies EEN bericht verder, nooit twee. 2555 Dat overvliegen was de reden om Lenis op mobiel erbij te halen, en deze 2556 eigenschap is toen nooit geprobeerd: hij stond op `normal`, en dan ook 2557 nog op .read-post hierboven -- een element dat door scroll-snap-align: 2558 none helemaal geen snappunt is, dus daar deed hij sowieso niets. 2559 Zonder native snappen (de gewone stand op mobiel, en op desktop waar 2560 Lenis het overneemt) verandert deze regel niets: er valt dan niets te 2561 stoppen. Hij telt alleen mee tijdens de proef, zie nativeSnap() in 2562 mod/read.js. */ 2563 scroll-snap-stop: always; 2550 2564 } 2551 2565 /* HET LAATSTE BERICHT SNAPT OOK (Robin, 20-8). Dat kon eerst niet: zijn -
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 } -
src/views/shell.ejs
r7b03c35 raaa700e 222 222 223 223 <!-- v9 stylesheet (full palette system) --> 224 <link rel="stylesheet" href="/assets/css/style.css?v=10 8">224 <link rel="stylesheet" href="/assets/css/style.css?v=109"> 225 225 <script> 226 226 /* iOS safe-area, built by hand. env(safe-area-inset-top) resolves to 0 on this iOS in … … 505 505 // Eén nummer voor de hele map. Te vaak bumpen kost één download; te weinig 506 506 // bumpen kost een bugfix die nooit aankomt. 507 var MOD_V = 59;507 var MOD_V = 60; 508 508 509 509 // name -> 1 (aan het laden) of de module-namespace (geladen). Een module
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)