mui 的部分寫法會導致插件與插件之間產生沖突,小猿最近發現很多這樣的問題,其中一個是mui 的時間插件與下拉刷新沖突。話不多說,先看時間插件常見的初始方法:
var chooseDate = function() { var result = mui('#result')[0]; var btns = mui('.mui-btn'); btns.each(function(i, btn) { btn.addEventListener('tap', function() { var _self = this; if(_self.picker) { _self.picker.show(function(rs) { result.value = rs.text; _self.picker.dispose(); _self.picker = null; }); } else { var optionsJson = this.getAttribute('data-options') || '{}'; var options = JSON.parse(optionsJson); var id = this.getAttribute('id'); _self.picker = new mui.DtPicker(options); _self.picker.show(function(rs) { result.value = rs.text; _self.picker.dispose(); _self.picker = null; }); } }, false); }); }
最開始想到的是監聽picker的彈出可隱藏,但是隱藏好像監聽不到,最后想到picker的有個隱藏方法,然后重寫一下這個方法,在重寫的方法里面對下拉刷新做對應操作,代碼如下:
var chooseDate = function() { var result = mui('#result')[0]; var btns = mui('.mui-btn'); btns.each(function(i, btn) { btn.addEventListener('tap', function() { mui('#pullrefresh').pullRefresh().setStopped(true); //暫時禁止滾動 var _self = this; if(_self.picker) { _self.picker.show(function(rs) { result.value = rs.text; _self.picker.dispose(); _self.picker = null; }); } else { var optionsJson = this.getAttribute('data-options') || '{}'; var options = JSON.parse(optionsJson); var id = this.getAttribute('id'); _self.picker = new mui.DtPicker(options); _self.picker.show(function(rs) { result.value = rs.text; _self.picker.dispose(); _self.picker = null; }); } _self.picker.hide = function() { //在選擇器開啟的時候會禁止頁面滾動,隱藏的時候解開 mui('#pullrefresh').pullRefresh().setStopped(false); //開啟禁止滾動 //下面這部分就是mui.picker.js的hide方法的源碼了,我並沒有深入分析,在此不再詳解 var i = this; if(!i.disposed) { var n = i.ui; n.picker.classList.remove(mui.className("active")), n.mask.close(), document.body.classList.remove(mui.className("dtpicker-active-for-page")), mui.back = i.__back } } }, false); }); }
希望可以幫助到大家!!