page-scroll.js 979 B

12345678910111213141516171819202122232425262728293031323334
  1. function getCurrentPage() {
  2. const pages = getCurrentPages();
  3. return pages[pages.length - 1] || {};
  4. }
  5. function onPageScroll(event) {
  6. const { vanPageScroller = [] } = getCurrentPage();
  7. vanPageScroller.forEach((scroller) => {
  8. if (typeof scroller === 'function') {
  9. // @ts-ignore
  10. scroller(event);
  11. }
  12. });
  13. }
  14. export const pageScrollMixin = (scroller) =>
  15. Behavior({
  16. attached() {
  17. const page = getCurrentPage();
  18. if (Array.isArray(page.vanPageScroller)) {
  19. page.vanPageScroller.push(scroller.bind(this));
  20. } else {
  21. page.vanPageScroller =
  22. typeof page.onPageScroll === 'function'
  23. ? [page.onPageScroll.bind(page), scroller.bind(this)]
  24. : [scroller.bind(this)];
  25. }
  26. page.onPageScroll = onPageScroll;
  27. },
  28. detached() {
  29. const page = getCurrentPage();
  30. page.vanPageScroller = (page.vanPageScroller || []).filter(
  31. (item) => item !== scroller
  32. );
  33. },
  34. });