You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.4 KiB
42 lines
1.4 KiB
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; |
|
}, |
|
}); |
|
}
|
|
|