define(function(require, exports, module) { require('core'); var $ = window.Zepto, UI = $.AMUI, QRCode = require('util.qrcode'), modal = require('ui.modal'), share = require('ui.share'); var navbarInit = function() { var $navBar = $('[data-am-widget="navbar"]'); if (!$navBar.length) return; var $win = $(window), $body = $('body'), $navBarNav = $navBar.find('.am-navbar-nav'), $navItems = $navBar.find('li'), navItemsCounter = $navItems.length; configItems = $navBarNav.attr('class') && parseInt($navBarNav.attr('class').match(/sm-block-grid-(\d+)/)[1]) || 3, navMinWidth = 60, //每个li最小宽度 offsetWidth = 16, $share = $navItems.filter('[data-am-navbar-share]'), $qrcode = $navItems.filter('[data-am-navbar-qrcode]'), activeStatus = 'am-active', $moreActions = $('', { id: UI.utils.generateGUID('am-navbar-actions') }), $moreLink = $('
  • 更多
  • '); // 如果有 Fix 的工具栏则设置 body 的 padding-bottom if ($navBar.css('position') == 'fixed') { $body.addClass('am-with-fixed-navbar'); } if ($qrcode.length) { var qrId = 'am-navbar-qrcode'; $qrModal = $('#' + qrId); if (!$qrModal.length) { var qrImg = $qrcode.attr('data-am-navbar-qrcode'), $qrModal = $('
    ' + '
    ' + '
    ', { id: qrId }), $qrContainer = $qrModal.find('.am-modal-bd'); // 判断上传自定义的二维码没有,否则生成二维码 if (qrImg) { $qrContainer.html(''); } else { var qrnode = new QRCode({ render: 'canvas', correctLevel: 0, text: window.location.href, width: 200, height: 200, background: '#fff', foreground: '#000' }); $qrContainer.html(qrnode); } $body.append($qrModal); } $qrcode.on('click', function(e) { e.preventDefault(); $qrModal.modal(); }); } if (navItemsCounter > configItems && navItemsCounter > calcSuiteItems()) { initActions(); } // console.log('NavItems: %d, config: %d, best: %d', navItemsCounter, configItems, calcSuiteItems()); function initActions() { $navBarNav.append($moreLink); $navBarNav.find('li').not('.am-navbar-more').slice(calcSuiteItems() - 1).appendTo($moreActions); // Append more actions $navBar.append($moreActions); } function checkNavBarItems() { if (calcSuiteItems() >= navItemsCounter) { // 显示所有链接,隐藏 more $moreLink.hide(); $moreActions.find('li').insertBefore($moreLink); return; } !$navBar.find('.am-navbar-actions').length && initActions(); $moreLink.show(); if ($navBarNav.find('li').length < calcSuiteItems()) { $moreActions.find('li').slice(0, calcSuiteItems() - $navBarNav.find('li').length).insertBefore($moreLink); } else if ($navBarNav.find('li').length > calcSuiteItems()) { if ($moreActions.find('li').length) { $navBarNav.find('li').not($moreLink).slice(calcSuiteItems() - 1).insertBefore($moreActions.find('li').first()); } else { $navBarNav.find('li').not($moreLink).slice(calcSuiteItems() - 1).appendTo($moreActions); } } } /** * 计算最适合显示的条目个数 * @returns {number} */ function calcSuiteItems() { return Math.floor(($win.width() - offsetWidth) / navMinWidth); } $navBar.on('click.navbar.amui', '.am-navbar-more', function(e) { e.preventDefault(); $moreLink[$moreActions.hasClass(activeStatus) ? 'removeClass' : 'addClass'](activeStatus); $moreActions.toggleClass(activeStatus); }); if ($share.length) { $share.on('click.navbar.amui', function(e) { e.preventDefault(); share.toggle(); }); } $win.on('resize.navbar.amui orientationchange.navbar.amui', UI.utils.debounce(checkNavBarItems, 150)); }; // DOMContent ready $(function() { navbarInit(); }); exports.init = navbarInit; });