| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | 
							- /**
 
-  * 弹出选择列表插件
 
-  * 此组件依赖 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-col-name"></div>\
 
- 		<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('touchstart', function(event) {
 
- 				event.preventDefault();
 
- 			}, false);
 
- 			self.panel.addEventListener('touchmove', function(event) {
 
- 				event.preventDefault();
 
- 			}, false);
 
- 		},
 
- 		_createPicker: function() {
 
- 			var self = this;
 
- 			var layer = self.options.layer || 1;
 
- 			var width = (100 / layer) + '%';
 
- 			var colNames = self.options.layerNames||[];
 
- 			self.pickers = [];
 
- 			for (var i = 1; i <= layer; i++) {
 
- 				var pickerElement = $.dom(pickerBuffer)[0];
 
- 				pickerElement.style.width = width;
 
- 				colNameElement = pickerElement.querySelector('.mui-picker-col-name');
 
- 				colNameElement.innerText = colNames[i-1]||"";
 
- 				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) {
 
- 				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);
 
 
  |