123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //针对阿里小程序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;
|