//针对阿里小程序Scroll控件定制的补充事件的插件类 //阿里小程序要求Scroll控件内必须有一个class为scroll-list的元素,这里我们的插件对scroll-list也有一定要求,scroll-list相对于父级元素不要有高度的padding或margin的情况,否则 //会导致滚动计算不准确导致无法命中事件的情况 class ScrollEventPlugin { constructor() { this.eventLock = false; this.widget = null; this.dom = null; this.onToBottomCallback = null; this.onToTopCallback = null; } bind(widget){ this.widget = widget; this.dom = widget.con; this.widget.on('scrollend', ()=>{ if(this.eventLock) { return; } let wTop = this.dom.getElementsByClassName('scroll-list')[0].style.top; wTop = parseFloat(wTop.replace('px' , '')); let scrollHeight = this.dom.clientHeight; let listHeight = this.dom.getElementsByClassName('scroll-list')[0].clientHeight; let maxOffset = listHeight - scrollHeight; if(wTop == 0 && this.onToTopCallback){ this.onToTopCallback(); this.eventLock = true; return; } if(wTop == maxOffset * -1 && this.onToBottomCallback){ this.onToBottomCallback(); this.eventLock = true; } }); } onScrollToBottom(callback){ this.onToBottomCallback = callback; } onScrollToTop(callback){ this.onToTopCallback = callback; } releaseEventLock(){ this.eventLock = false; } } module.exports = ScrollEventPlugin;