UNPKG

iuap-design

Version:
213 lines (181 loc) 5.96 kB
u.Month = u.BaseComponent.extend({ DEFAULTS : { }, init:function(){ var self = this; var element = this.element; this.options = u.extend({}, this.DEFAULTS, this.options); this.panelDiv = null; this.input = this.element.querySelector("input"); //u.addClass(this.element,'u-text'); var d = new Date(); this.month = d.getMonth() + 1; this.defaultMonth = this.month; u.on(this.input, 'blur',function(e){ this.setValue(this.input.value); }.bind(this)); // 添加focus事件 this.focusEvent(); // 添加右侧图标click事件 this.clickEvent(); } }) u.Month.fn = u.Month.prototype; u.Month.fn.createPanel = function(){ if(this.panelDiv){ this._fillMonth(); return; } var oThis = this; this.panelDiv = u.makeDOM('<div class="u-date-panel" style="padding:0px;margin:0px;"></div>'); this.panelContentDiv = u.makeDOM('<div class="u-date-content"></div>'); this.panelDiv.appendChild(this.panelContentDiv); this.preBtn = u.makeDOM('<button class="u-date-pre-button u-button flat floating mini" style="display:none;">&lt;</button>'); this.nextBtn = u.makeDOM('<button class="u-date-next-button u-button flat floating mini" style="display:none;">&gt;</button>'); u.on(this.preBtn, 'click', function(e){ oThis.startYear -= 10; oThis._fillYear(); }); u.on(this.nextBtn, 'click', function(e){ oThis.startYear += 10; oThis._fillYear(); }); this.panelContentDiv.appendChild(this.preBtn); this.panelContentDiv.appendChild(this.nextBtn); this._fillMonth(); this.element.parentNode.appendChild(this.panelDiv); } /** * 填充月份选择面板 * @private */ u.Month.fn._fillMonth = function(){ var oldPanel,template,monthPage,_month,cells,i; oldPanel = this.panelContentDiv.querySelector('.u-date-content-page'); if(oldPanel) this.panelContentDiv.removeChild(oldPanel); _month = this.month; template = ['<div class="u-date-content-page">', '<div class="u-date-content-title">'+_month+'月</div>', '<div class="u-date-content-panel">', '<div class="u-date-content-year-cell">1月</div>', '<div class="u-date-content-year-cell">2月</div>', '<div class="u-date-content-year-cell">3月</div>', '<div class="u-date-content-year-cell">4月</div>', '<div class="u-date-content-year-cell">5月</div>', '<div class="u-date-content-year-cell">6月</div>', '<div class="u-date-content-year-cell">7月</div>', '<div class="u-date-content-year-cell">8月</div>', '<div class="u-date-content-year-cell">9月</div>', '<div class="u-date-content-year-cell">10月</div>', '<div class="u-date-content-year-cell">11月</div>', '<div class="u-date-content-year-cell">12月</div>', '</div>', '</div>'].join(""); monthPage = u.makeDOM(template); cells =monthPage.querySelectorAll('.u-date-content-year-cell'); for (i = 0; i < cells.length; i++){ if (_month == i + 1){ u.addClass(cells[i],'current'); } cells[i]._value = i + 1; new URipple(cells[i]); } u.on(monthPage, 'click', function(e){ var _m = e.target._value; this.month = _m; monthPage.querySelector('.u-date-content-title').innerHTML = _m + '月'; this.setValue(_m); this.hide(); }.bind(this)); this.preBtn.style.display = 'none'; this.nextBtn.style.display = 'none'; this.panelContentDiv.appendChild(monthPage); this.currentPanel = 'month'; }; u.Month.fn.setValue = function(value) { value = value? value: ''; this.value = value; if(value){ this.month = value; }else{ this.month = this.defaultMonth; } this.input.value = value; this.trigger('valueChange', {value:value}) } u.Month.fn.focusEvent = function() { var self = this; u.on(this.element,'click', function(e) { self.show(e); if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } }); } //下拉图标的点击事件 u.Month.fn.clickEvent = function() { var self = this; var caret = this.element.nextSibling u.on(caret,'click',function(e) { self.show(e); if (e.stopPropagation) { e.stopPropagation(); } else { e.cancelBubble = true; } }) } u.Month.fn.show = function(evt) { var oThis = this; this.createPanel(); this.width = this.element.offsetWidth; if(this.width < 300) this.width = 300; u.showPanelByEle({ ele:this.input, panel:this.panelDiv, position:"bottomLeft" }); document.body.onscroll = function(){ u.showPanelByEle({ ele:oThis.input, panel:oThis.panelDiv, position:"bottomLeft" }); } this.panelDiv.style.width = 152 + 'px'; this.panelDiv.style.zIndex = u.getZIndex(); u.addClass(this.panelDiv, 'is-visible'); var callback = function (e) { if (e !== evt && e.target !== this.input && !oThis.clickPanel(e.target)) { u.off(document,'click',callback); // document.removeEventListener('click', callback); this.hide(); } }.bind(this); u.on(document,'click',callback); // document.addEventListener('click', callback); } u.Month.fn.clickPanel = function(dom){ while(dom){ if(dom == this.panelDiv){ return true }else{ dom = dom.parentNode; } } return false; } u.Month.fn.hide = function() { u.removeClass(this.panelDiv, 'is-visible'); this.panelDiv.style.zIndex = -1; } if (u.compMgr) u.compMgr.regComp({ comp: u.Month, compAsString: 'u.Month', css: 'u-month' })