Changeset 9a22776 in Klonkt


Ignore:
Timestamp:
08/24/2026 09:02:23 AM (2 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
d7d2ede
Parents:
cd7d7d8
Message:

De native-snapproef er weer uit: mobiel scrolt goed zonder

Robins oordeel op de telefoon (24-8): met de vlag UIT werkte het scrollen
ineens wel goed, dus de proef is niet meer nodig en gaat er ongewijzigd uit.
read.js en style.css staan byte voor byte terug op de stand van voor de proef
(7b03c35): de vlag, de vroege return in startLenis() en scroll-snap-stop op
het anker verdwijnen samen.

Ook de zetSnappen-aanpassing (expliciet 'y proximity' in plaats van
terugvallen op de stylesheet) gaat mee terug. Die was er alleen zodat de
proef zonder Lenis iets kon bewijzen; met Lenis op mobiel is die tak
onbereikbaar zodra de module geladen is, en de oude stand is de stand die
zojuist goed bevonden is.

Wat er in de vault blijft staan, want dat is niet weerlegd: de vier routes
waarlangs de browser een gebaar van Lenis kan overnemen staan nog steeds in
de vendor-bron. Komt de klacht terug, dan begint het onderzoek daar en niet
opnieuw bij nul. Zie Klonkt Reader Scroll in de Brain.

MOD_V 62 en style.css v=110: beide bestanden wijzigen opnieuw, en een browser
die 61/109 al heeft moet de teruggezette versie ook echt krijgen.

Location:
src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/assets/css/style.css

    rcd7d7d8 r9a22776  
    25482548       2rem naar 4rem, dus deze ook. */
    25492549    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;
    25642550}
    25652551/* HET LAATSTE BERICHT SNAPT OOK (Robin, 20-8). Dat kon eerst niet: zijn
  • src/assets/js/mod/read.js

    rcd7d7d8 r9a22776  
    252252const RUST_MS = 120;
    253253
    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 
    289254let bezig = false;          // loopt er een gebaar of een uitloop?
    290255let ooitGescrold = false;   // snappen begint UIT, zie zetSnappen()
     
    340305  // zijn snap heeft zijn scroll-gebeurtenissen nodig om te kunnen timen.
    341306  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;
    345307  const [L, S] = await Promise.all([
    346308    import(`/assets/vendor/lenis.mjs?v=${VENDOR_V}`),
     
    581543  // eerste gebaar naar beneden zet hem aan.
    582544  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';
    590546  if (el.style.scrollSnapType !== wil) el.style.scrollSnapType = wil;
    591547}
     
    643599  document.querySelectorAll('[data-lenis-prevent].read-post')
    644600    .forEach((a) => a.removeAttribute('data-lenis-prevent'));
    645 
    646   // DE VLAG WORDT HIER GELEZEN, op elke pagina en in elke weergave, en niet pas
    647   // in startLenis(). Anders zit er een val in: land je in Grid, dan draait
    648   // startLenis() helemaal niet, wordt ?nativesnap=1 nergens opgeschreven, en is
    649   // de queryreeks weg zodra je op Lezen tikt. De proef gaat dan stilzwijgend
    650   // niet door en je beoordeelt Lenis terwijl je denkt dat je de browser
    651   // beoordeelt. Gemeten op dev: weergave 'grid', vlag null.
    652   // Dit mag boven de terugval hieronder staan omdat de module op elke pagina
    653   // draait (data-js is "chrome read tape"), ook waar geen leesstroom is.
    654   nativeSnap();
    655601
    656602  const s = document.getElementById('read-stream');
  • src/views/shell.ejs

    rcd7d7d8 r9a22776  
    222222
    223223<!-- v9 stylesheet (full palette system) -->
    224 <link rel="stylesheet" href="/assets/css/style.css?v=109">
     224<link rel="stylesheet" href="/assets/css/style.css?v=110">
    225225<script>
    226226/* iOS safe-area, built by hand. env(safe-area-inset-top) resolves to 0 on this iOS in
     
    505505  // Eén nummer voor de hele map. Te vaak bumpen kost één download; te weinig
    506506  // bumpen kost een bugfix die nooit aankomt.
    507   var MOD_V = 61;
     507  var MOD_V = 62;
    508508
    509509  // name -> 1 (aan het laden) of de module-namespace (geladen). Een module
Note: See TracChangeset for help on using the changeset viewer.