Changeset fbacddc in Klonkt for src/assets/js/mod/read.js
- Timestamp:
- 08/24/2026 07:21:48 AM (2 weeks ago)
- Branches:
- main
- Children:
- b4af6f3
- Parents:
- 5e72413
- File:
-
- 1 edited
-
src/assets/js/mod/read.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/js/mod/read.js
r5e72413 rfbacddc 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 de 452 // vendor-bron, geen vermoeden. Drie feiten op een rij: 453 // 454 // 1. lenis geeft 'virtual-scroll' door met de RUWE vingerdelta, VOOR hij 455 // de uitloop uitrekent (teken * |snelheid|^touchInertiaExponent). 456 // 2. lenis-snap negeert elke touchmove en beoordeelt dus EEN keer per 457 // gebaar, op touchend, met `scroll + rawDelta` -- de plek waar je 458 // 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 de 463 // smoothWheel-uitloop is kort, dus voorspelling en landing liggen bijeen. 464 // Vandaar: op touch de module-trigger eraf en zelf beoordelen tegen 465 // lenis.targetScroll -- die wordt synchroon bij touchend gezet en IS het 466 // exacte landingspunt van de uitloop. 467 if (OP_TOUCH.matches) { 468 lenis.off('virtual-scroll', snap.onSnapDebounced); 469 let raakTimer = null; 470 let vertrek = 0; // scrollpositie bij loslaten: punten daarachter zijn 471 // de bovenkant van het HUIDIGE bericht, nooit grijpen 472 lenis.on('virtual-scroll', (e) => { 473 const soort = e.event && e.event.type; 474 if (soort === 'touchstart' || soort === 'touchmove') { clearTimeout(raakTimer); return; } 475 if (soort !== 'touchend') return; 476 vertrek = lenis.scroll; 477 clearTimeout(raakTimer); 478 raakTimer = setTimeout(() => { 479 if (!laatsteRichtingOmlaag) return; 480 const doel = lenis.targetScroll; // de echte landing, niet de raakdelta 481 const punten = snap.computeSnaps(); 482 let best = -1; 483 punten.forEach((punt, i) => { 484 if (punt.value <= vertrek + 2) return; 485 if (Math.abs(doel - punt.value) > vangZone()) return; 486 if (best < 0 || Math.abs(doel - punt.value) < Math.abs(doel - punten[best].value)) best = i; 487 }); 488 // Landt de uitloop net VOORBIJ een bovenkant, dan is een klein stukje 489 // terug naar die lijn precies de gevraagde snap -- geen terugtrekking, 490 // want punten achter het loslaatpunt zijn hierboven al uitgesloten. 491 if (best >= 0) echtGaNaar(best); 492 }, 150); 493 }); 494 } 495 450 496 // Native snappen uit: twee mechanismen op dezelfde scroller vechten. 451 497 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)