(function(window, document) { var TabBar = function(options) { options = options || {}; this.tabClass = options.tabClass || 'tab'; //容器元素 this.itemClass = options.itemClass || 'tab-item'; //选项样式名称 this.selectedClass = options.selectedClass || 'active'; //选项激活样式名称 this.itemIconClass = options.itemIconClass || 'tab-item-icon'; //选项图标样式名称 this.itemLabelClass = options.itemLabelClass || 'tab-item-label'; //选项标题样式名称 this.list = options.list || []; //选项列表 this.selected = 0; if (this.list.length) { this.render(); } this.tabElem = document.querySelector('.' + this.tabClass); this.itemElems = [].slice.call(document.querySelectorAll('.' + this.itemClass)); this.handleOldVersion(); this.initEvent(); }; var proto = TabBar.prototype; proto.refresh = function() { this.itemElems = [].slice.call(document.querySelectorAll('.' + this.itemClass)); }; proto.handleOldVersion = function() { var list = this.list; if (!list.length) { for (var i = 0; i < this.itemElems.length; i++) { list.push({ url: this.itemElems[i].getAttribute('href') }); } } window.__wap2app_old_tab_item_urls = []; for (var i = 0; i < list.length; i++) { __wap2app_old_tab_item_urls.push(list[i].url); } }; proto.render = function() { var tabbarElem = document.createElement('nav'); tabbarElem.className = this.tabClass; if (!this.list[0].iconPath) { tabbarElem.className = tabbarElem.className + ' no-icon'; } if (!this.list[0].text) { tabbarElem.className = tabbarElem.className + ' no-label'; } var html = []; for (var i = 0; i < this.list.length; i++) { html.push(this.renderItem(this.list[i], i)); } tabbarElem.innerHTML = '
' + html.join('') + '
'; document.body.appendChild(tabbarElem); }; proto.renderItem = function(item, index) { var isSelected = this.selected === index; var html = ['
']; if (item.iconPath) { html.push('
'); } if (item.text) { html.push('
' + item.text + '
'); } html.push('
'); return html.join(''); }; proto.initEvent = function() { if (!this.tabElem) { throw new Error('未找到TabBar容器'); } if (!this.itemElems || !this.itemElems.length) { throw new Error('TabBar容器内无选项'); } var self = this; //全局回调 window.__wap2app_change_tab_callback = function(e) { self.highlight(e.index); }; this.tabElem.addEventListener('click', function(e) { var target = e.target; for (; target && target !== self.tabElem; target = target.parentNode) { var index = self.itemElems.indexOf(target); if (~index) { if (index === self.selected) { return; } e.preventDefault(); e.stopPropagation(); var url = target.getAttribute('href'); if (!url) { throw new Error('未指定选项打开的链接地址'); } self.highlight(index); var id = plus.runtime.appid; wap2app.switchTab(id, id + '_' + index, url); } } }); }; proto.highlight = function(index) { this.itemElems[this.selected].classList.remove(this.selectedClass); var currentItemElem = this.itemElems[index] currentItemElem.classList.add(this.selectedClass); if (currentItemElem.scrollIntoView) { currentItemElem.scrollIntoView(); } this.selected = index; }; window.TabBar = TabBar; })(window, document);