| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | /** * 弹出选择列表插件 * 此组件依赖 listpcker ,请在页面中先引入 mui.picker.css + mui.picker.js * varstion 1.0.1 * by Houfeng * Houfeng@DCloud.io */(function($, document) {	//创建 DOM	$.dom = function(str) {		if (typeof(str) !== 'string') {			if ((str instanceof Array) || (str[0] && str.length)) {				return [].slice.call(str);			} else {				return [str];			}		}		if (!$.__create_dom_div__) {			$.__create_dom_div__ = document.createElement('div');		}		$.__create_dom_div__.innerHTML = str;		return [].slice.call($.__create_dom_div__.childNodes);	};	var panelBuffer = '<div class="mui-poppicker">\		<div class="mui-poppicker-header">\			<button class="mui-btn mui-poppicker-btn-cancel">取消</button>\			<button class="mui-btn mui-btn-blue mui-poppicker-btn-ok">确定</button>\			<div class="mui-poppicker-clear"></div>\		</div>\		<div class="mui-poppicker-body">\		</div>\	</div>';	var pickerBuffer = '<div class="mui-picker">\		<div class="mui-picker-inner">\			<div class="mui-pciker-rule mui-pciker-rule-ft"></div>\			<ul class="mui-pciker-list">\			</ul>\			<div class="mui-pciker-rule mui-pciker-rule-bg"></div>\		</div>\	</div>';	//定义弹出选择器类	var PopPicker = $.PopPicker = $.Class.extend({		//构造函数		init: function(options) {			var self = this;			self.options = options || {};			self.options.buttons = self.options.buttons || ['取消', '确定'];			self.panel = $.dom(panelBuffer)[0];			document.body.appendChild(self.panel);			self.ok = self.panel.querySelector('.mui-poppicker-btn-ok');			self.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel');			self.body = self.panel.querySelector('.mui-poppicker-body');			self.mask = $.createMask();			self.cancel.innerText = self.options.buttons[0];			self.ok.innerText = self.options.buttons[1];			self.cancel.addEventListener('tap', function(event) {				self.hide();			}, false);			self.ok.addEventListener('tap', function(event) {				if (self.callback) {					var rs = self.callback(self.getSelectedItems());					if (rs !== false) {						self.hide();					}				}			}, false);			self.mask[0].addEventListener('tap', function() {				self.hide();			}, false);			self._createPicker();			//防止滚动穿透			self.panel.addEventListener($.EVENT_START, function(event) {				event.preventDefault();			}, false);			self.panel.addEventListener($.EVENT_MOVE, function(event) {				event.preventDefault();			}, false);		},		_createPicker: function() {			var self = this;			var layer = self.options.layer || 1;			var width = (100 / layer) + '%';			self.pickers = [];			for (var i = 1; i <= layer; i++) {				var pickerElement = $.dom(pickerBuffer)[0];				pickerElement.style.width = width;				self.body.appendChild(pickerElement);				var picker = $(pickerElement).picker();				self.pickers.push(picker);				pickerElement.addEventListener('change', function(event) {					var nextPickerElement = this.nextSibling;					if (nextPickerElement && nextPickerElement.picker) {						var eventData = event.detail || {};						var preItem = eventData.item || {};						nextPickerElement.picker.setItems(preItem.children);					}				}, false);			}		},		//填充数据		setData: function(data) {			var self = this;			data = data || [];			self.pickers[0].setItems(data);		},		//获取选中的项(数组)		getSelectedItems: function() {			var self = this;			var items = [];			for (var i in self.pickers) {    				if(self.pickers.hasOwnProperty(i)) { // 修复for in会访问继承属性造成items报错情况					var picker = self.pickers[i];					items.push(picker.getSelectedItem() || {});				}			}			return items;		},		//显示		show: function(callback) {			var self = this;			self.callback = callback;			self.mask.show();			document.body.classList.add($.className('poppicker-active-for-page'));			self.panel.classList.add($.className('active'));			//处理物理返回键			self.__back = $.back;			$.back = function() {				self.hide();			};		},		//隐藏		hide: function() {			var self = this;			if (self.disposed) return;			self.panel.classList.remove($.className('active'));			self.mask.close();			document.body.classList.remove($.className('poppicker-active-for-page'));			//处理物理返回键			$.back=self.__back;		},		dispose: function() {			var self = this;			self.hide();			setTimeout(function() {				self.panel.parentNode.removeChild(self.panel);				for (var name in self) {					self[name] = null;					delete self[name];				};				self.disposed = true;			}, 300);		}	});})(mui, document);
 |