import { isFunction } from '../common/validator'; import { getCurrentPage, isDef } from '../common/utils'; function onPageScroll(event) { const { vanPageScroller = [] } = getCurrentPage(); vanPageScroller.forEach((scroller) => { if (typeof scroller === 'function') { // @ts-ignore scroller(event); } }); } export function pageScrollMixin(scroller) { return Behavior({ attached() { const page = getCurrentPage(); if (!isDef(page)) { return; } const _scroller = scroller.bind(this); const { vanPageScroller = [] } = page; if (isFunction(page.onPageScroll) && page.onPageScroll !== onPageScroll) { vanPageScroller.push(page.onPageScroll.bind(page)); } vanPageScroller.push(_scroller); page.vanPageScroller = vanPageScroller; page.onPageScroll = onPageScroll; this._scroller = _scroller; }, detached() { const page = getCurrentPage(); if (!isDef(page) || !isDef(page.vanPageScroller)) { return; } const { vanPageScroller } = page; const index = vanPageScroller.findIndex((v) => v === this._scroller); if (index > -1) { page.vanPageScroller.splice(index, 1); } this._scroller = undefined; }, }); }