Changes in src/assets/js/mod/read.js [e48ec78:9173265] in Klonkt
- File:
-
- 1 edited
-
src/assets/js/mod/read.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/read.js
re48ec78 r9173265 448 448 if (punten[vooruit].value - nu <= vangZone()) echtGaNaar(vooruit); 449 449 }; 450 451 // OP TOUCH DOET DE MODULE-EIGEN TRIGGER HET NIET, en dat is meetbaar in de452 // vendor-bron, geen vermoeden. Drie feiten op een rij:453 //454 // 1. lenis geeft 'virtual-scroll' door met de RUWE vingerdelta, VOOR hij455 // de uitloop uitrekent (teken * |snelheid|^touchInertiaExponent).456 // 2. lenis-snap negeert elke touchmove en beoordeelt dus EEN keer per457 // gebaar, op touchend, met `scroll + rawDelta` -- de plek waar je458 // vinger LOSLIET.459 // 3. de uitloop draagt daarna nog honderden pixels verder.460 //461 // De snapbeslissing valt dus op een positie die de scroll meteen verlaat.462 // Op desktop klopt dezelfde som wel: wieldelta's zijn klein en de463 // smoothWheel-uitloop is kort, dus voorspelling en landing liggen bijeen.464 // Vandaar: op touch de module-trigger eraf en zelf beoordelen tegen465 // lenis.targetScroll -- die wordt synchroon bij touchend gezet en IS het466 // exacte landingspunt van de uitloop.467 if (OP_TOUCH.matches) {468 // Hoe lang het richten naar de lijn duurt, in seconden. De ene knop voor469 // "snapperiger": 0.18 is direct, 0.3 is landen, 0.5 is zweven.470 const SNAP_DUUR = 0.22;471 lenis.off('virtual-scroll', snap.onSnapDebounced);472 let raakTimer = null;473 let vertrek = 0; // scrollpositie bij loslaten: punten daarachter zijn474 // de bovenkant van het HUIDIGE bericht, nooit grijpen475 lenis.on('virtual-scroll', (e) => {476 const soort = e.event && e.event.type;477 if (soort === 'touchstart' || soort === 'touchmove') { clearTimeout(raakTimer); return; }478 if (soort !== 'touchend') return;479 vertrek = lenis.scroll;480 clearTimeout(raakTimer);481 // TIMEOUT 0, geen 150ms. Dit event komt binnen VOOR lenis zelf de482 // touchend verwerkt (de emit staat in de bron boven de verwerking), dus483 // targetScroll is hier nog het oude doel. Een tik later is de uitloop484 // gestart en staat targetScroll op de echte landing -- en dan sturen we485 // hem meteen bij, in plaats van de uitloop 150ms te laten lopen en er486 // dan een aparte snap-animatie overheen te zetten.487 raakTimer = setTimeout(() => {488 if (!laatsteRichtingOmlaag || snap.isStopped) return;489 const doel = lenis.targetScroll; // de echte landing, niet de raakdelta490 const punten = snap.computeSnaps();491 // De EERSTE grens voorbij het loslaatpunt, niet de dichtstbijzijnde bij492 // de landing. Robins regel (24-8): wordt het target voorbijgescrolld,493 // dan landen we alsnog OP het target. De zone werkt dus alleen aan de494 // korte kant -- kom je er niet eens bij in de buurt, dan lees je gewoon495 // binnen een lang bericht en blijft alles vrij. Eroverheen, hoe ver496 // ook, betekent grijpen. Een harde veeg komt daarmee altijd precies497 // een bericht verder, nooit twee: dat is het bladeren.498 let eerste = -1;499 punten.forEach((punt, i) => {500 if (punt.value > vertrek + 2 && (eerste < 0 || punt.value < punten[eerste].value)) eerste = i;501 });502 if (eerste < 0) return; // niets meer voor je: vrij uitscrollen503 // HET RICHTEN IS DE SNAP (Robins regel, 24-8): de lopende uitloop504 // krijgt het nieuwe doel, er komt geen tweede animatie overheen.505 //506 // MET EEN VASTE DUUR, niet met de lerp van de uitloop. Die lerp-vorm507 // (0.09) is boterzacht maar heeft een exponentiele staart van ruim een508 // halve seconde -- Robin wilde het korter en beslister (24-8). Een509 // duur eindigt ECHT, op een instelbaar moment, zoals iOS-paging: vlot510 // weg, stevig landen. Zelfde easing-familie als de desktop-snap.511 // SNAP_DUUR is de enige knop: korter is snapperiger, langer is zachter.512 if (doel >= punten[eerste].value - vangZone()) {513 lenis.scrollTo(punten[eerste].value, {514 duration: SNAP_DUUR,515 easing: (t) => 1 - Math.pow(1 - t, 4),516 force: true,517 userData: { initiator: 'snap' },518 });519 }520 }, 0);521 });522 }523 524 450 // Native snappen uit: twee mechanismen op dezelfde scroller vechten. 525 451 document.documentElement.style.scrollSnapType = 'none';
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)