tPicker = function (option) {\r\n return new DtPicker(option);\r\n };\r\n})(ipu || window, jQuery);\r\n\n// 更新方法和属性命名\n// 不能支持元素隐藏时,使用百比分处理移动距离。。。?\n// 支持两个以内容同时显示\n// 支持类似snap实现\n// 上下移动?\n// 理想是移除carousel.js的实现,用hammerCarousel.js实现所有相关功能\n// indicatorPosition: 'center', // left|right|center;暂不支持,不知道怎么支持在中间显示,用全宽度,配合point-event:none,可能ok,参考humUI和mui\n\n(function (ipu, $, Hammer) {\n /**\n * @class\n * @uses Hammer.js\n * 通过hammer.js实现的banner功能组件,\n * 因为实现轮播,显示第一项后,再显示第一项,所以第一项有被复制到添加到最后\n *\n * @example\n * <!-- 组件html结构如下,li里的内容用户可自定义 -->\n * <div class=\"ipu-carousel ipu-hammer-carousel\">\n * <ul class=\"ipu-carousel-wrapper\">\n * <li ><img src=\"../../biz/img/01.jpg\" alt=\"\"></li>\n * <li ><img src=\"../../biz/img/02.jpg\" alt=\"\"></li>\n * <li ><img src=\"../../biz/img/03.jpg\" alt=\"\"></li>\n * <li ><img src=\"../../biz/img/04.jpg\" alt=\"\"></li>\n * </ul>\n * </div>\n *\n * @constructor 不能直接访问该类,调用 {@link ipu#hammerCarousel}生成实例\n * @param {String|JqueryObj} slt\n * jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom\n * @param {Object} option 组件配置参数,默认配置见 {@link #cfg-defaultOption}\n */\n function HammerCarousel(slt, option) {\n this.option = $.extend({}, this.defaultOption, option);\n this.el = $(slt).get(0);\n this._init();\n }\n\n $.extend(HammerCarousel.prototype, {\n /**\n * 组件默认配置项\n *\n * @cfg {Object} defaultOption\n * @cfg {Number} defaultOption.index 初始化时显示第几项,用户未指定时,会查找子项内容上有ipu-current的项显示,默认显示第一项\n * @cfg {Boolean} defaultOption.loop 是否循环切换,只有轮播切换时,才能自动轮播\n * @cfg {Boolean} defaultOption.autoPlay 是否自动轮播\n * @cfg {Number} defaultOption.duration 自动轮播时的间隔时间,单位ms\n * @cfg {Boolean} defaultOption.indicator 是否生成banner提示器,true右下角出现小点\n * @cfg {Function} defaultOption.callBack 轮播显示某项时的回调函数\n * @cfg {Number} defaultOption.callBack.index 当前显示的项索引\n * @cfg {Function} defaultOption.clickBack\n * 切换项时被点击时的回调函数,此处主要是为了处理复制项与第一项的点击事件进行处理,\n * 让用户不关注点击的是第一项或是复制项,回调作用域为组件对象\n * @cfg {Number} defaultOption.clickBack.index 点击的项索引\n */\n defaultOption: {\n index: null,\n loop: false,\n autoPlay: false,\n duration: 3000,\n indicator: false,\n callBack: null,\n clickBack: null\n },\n _init: function () {\n this.wrapper = $(\">.ipu-carousel-wrapper\", this.el);\n this.carouselItems = $(\">li\", this.wrapper);\n this.itemSize = this.carouselItems.size(); // 子项数量\n\n this.showItemSize = 1; // 假设一屏默认显示1个,所以做循环显示只需要复制一个子项\n this.carouselItemWides = []; // 子项宽度尺寸\n \n /** @property {Number} 当前显示子项索引,从0开始 */\n this.currentIndex = 0; // 当前显示子项索引\n this.moveLen = 0; // 当前滚动移动距离\n\n /** @type {Boolean} 循环展示时,第一项会被复制,显示项是第一项时,是否为第一项的复制项 */\n this.cloneItem = false; // index是0的时候,有可能显示的是第一项,也有可能显示的是复制项,这个参数用来标记是否复制项\n\n if (this.option.indicator) {\n this._addIndicator();\n }\n\n // 如果做循环展示,则要复制起始展示项到最后面\n if (this.option.loop) {\n this.carouselItems.slice(0, this.showItemSize).clone().appendTo(this.wrapper); // 这里假设每个元素宽度都是相等的\n }\n\n var that = this;\n if (this.option.clickBack) {\n $(\">li\", this.wrapper).each(function (i) {\n $(this).click(function () {\n that.option.clickBack.call(this, i % that.size);\n });\n })\n }\n\n this.hammer = new Hammer.Manager(this.el);\n this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_HORIZONTAL, threshold: 10}));\n this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this._onPan, this));\n\n this._sizeCount();\n $(window).resize(function () { // 在窗口尺寸变化时,更新尺寸信息\n that.refresh();\n });\n\n if (this.option.index == null) {\n var activeIndex = this.carouselItems.filter(\".ipu-current\").index();\n this.currentIndex = activeIndex != -1 ? activeIndex : 0;\n }\n\n this.show(this.currentIndex, false);\n },\n /**\n * 停止自动滚动\n */\n stop: function () {\n this._pause();\n this.option.autoPlay = false;\n },\n _pause: function () {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n },\n /**\n * 切换到上一项\n */\n prev: function () {\n var index;\n if(this.option.loop){\n index = this.currentIndex == 0 ? this.itemSize - 1 : this.currentIndex - 1;\n if (index == this.itemSize - 1) {\n this._show(this.itemSize, false);\n this.wrapper.width();\n }\n }else{\n index = (this.currentIndex - 1 + this.itemSize) % this.itemSize;\n }\n\n this._show(index);\n },\n /**\n * 切换到下一项\n */\n next: function () {//下一张\n var index\n if(this.option.loop){\n index = this.currentIndex == this.itemSize ? 1 : this.currentIndex + 1;\n if (index == 1) {\n this._show(0, false);\n this.wrapper.width();\n }\n } else {\n index = (this.currentIndex + 1) % this.itemSize;\n }\n\n this._show(index);\n },\n /**\n * 切换显示指定项\n *\n * @param {Number} index 要切换到的项索引\n *\n */\n show: function (index) {//跳到指定索引处\n var index = index % this.itemSize;\n if (index < 0) {\n index = this.itemSize + index;\n }\n this._show(index); // 默认追加动画\n },\n /**\n * 自动轮播\n */\n play: function () {\n this.option.autoPlay = true;\n this._play();\n },\n _play: function () {\n if (this.option.autoPlay && this.option.loop && !this.timeoutId) {\n var that = this;\n this.timeoutId = setTimeout(function () {\n that.timeoutId = null;//清空这个timeoutId,代表该次处理已经执行了\n that.next();\n }, that.option.duration);\n }\n },\n _addIndicator: function () {\n var html = \"\";\n for (var i = 0; i < this.itemSize; i++) {\n html += \"<li></li>\";\n }\n html = \"<ul class='ipu-carousel-indicator'>\" + html + \"</ul>\";\n this.indicator = $(html).appendTo(this.el);\n this.indicatorIndexs = $(\"li\", this.indicator);\n },\n _sizeCount: function () {\n this.wrapperWidth = this.wrapper.outerWidth(true);\n this.itemWidth = this.carouselItems.eq(0).outerWidth(true);\n this.mostSize = this.itemSize * this.itemWidth; // 宽度*数量\n $(this.wrapper).removeClass(\"ipu-carousel-animate\").width();\n this.carouselItemWides = [];\n\n var that = this;\n $(\">li\", this.wrapper).each(function (index, dom) { // 此处要注意,最后一个子项是后加进入的,要重新使用jquery处理一下,不能直接使用this.xx来处理\n that.carouselItemWides[index] = $(this).position().left;\n });\n },\n /**\n * 宽度信息或尺寸信息发生变更时,进行刷新计算\n * 判断是否需要重新计算尺寸,若宽度尺寸发生变化,进行重新尺寸计算\n */\n refresh: function () {\n if (this.wrapperWidth != this.wrapper.outerWidth(true)) {\n this._sizeCount();\n this._show(this.currentIndex, false); //新的位置\n }\n },\n _move: function (moveLen) { // 拖动时的处理\n this._pause();\n $(this.wrapper).removeClass(\"ipu-carousel-animate\");\n\n if(this.option.loop){\n var move = (this.moveLen - moveLen) % this.mostSize;\n move = (move + this.mostSize) % this.mostSize;\n\n }else{\n var move = this.moveLen - moveLen;\n if (move < 0) {\n move = move / 2;\n }else if(move > this.mostSize){\n move = this.mostSize + (move - this.mostSize)/2;\n }\n }\n\n this.displayMoveLen = move;\n move = -move + \"px\";\n $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\n },\n _show: function (index, animate) { // 知道最终移动到的项时,调用\n if (animate !== false) { // 默认值为true\n animate = true;\n }\n\n this._pause();\n $(this.wrapper).toggleClass(\"ipu-carousel-animate\", animate);\n this.currentIndex = index % this.itemSize;\n this.cloneItem = index == this.itemSize;\n\n this.moveLen = this.carouselItemWides[index];\n var move = -this.moveLen + \"px\";\n\n $(this.wrapper).css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\n\n var currentIndex = this.currentIndex;\n if (animate && this.option.callBack) {\n this.option.callBack(currentIndex, this.cloneItem);//返回当前索引,以及是滞最后一项参数\n }\n\n if (this.indicator) {\n this.indicatorIndexs.eq(currentIndex).addClass(\"ipu-current\").siblings().removeClass(\"ipu-current\");\n }\n\n this._play();//处理自动播放\n },\n _onPan: function (ev) {\n var delta = ev.deltaX; // 内容往左,deltaX为正值\n\n // pancancel与panend,有效的pan事件结束与无效的pan事件结束?\n if (ev.type == 'panend' || ev.type == 'pancancel'){\n var value = delta / this.itemWidth;\n var intValue = parseInt(Math.abs(value)); // 取整数\n var decimal = Math.abs(value) % 1; // 取小数\n\n if (decimal > 0.2) { // 滑动超过页面宽20%;\n intValue = intValue + 1;\n }\n if (delta > 0) {\n intValue = -intValue;\n }\n var index;\n\n if(this.option.loop) {\n index = (this.currentIndex + intValue) % this.itemSize;\n index = (index + this.itemSize) % this.itemSize; // 因为可能是个负值,转换成正值\n\n // 当前位移大于一个项的长度,这由move方法导致的,所以此时只能是最后一项在显示,所以要显示最后一项\n if (index == 0 && this.displayMoveLen > this.itemWidth) {\n index = this.itemSize;\n }\n } else { // 非循环时\n index = this.currentIndex + intValue;\n if (index < 0) {\n index = 0;\n } else if (index > this.itemSize - 1) {\n index = this.itemSize - 1;\n }\n }\n\n this._show(index);\n } else if (ev.type == 'panmove') {\n this._move(delta);\n }\n }\n });\n\n /**\n * @member ipu\n * 生成HammerCarousel实例,参数信息见{@link HammerCarousel#method-constructor}\n *\n * @param {String} slt\n * @param {Object} option\n * @returns {HammerCarousel}\n */\n ipu.hammerCarousel = function (slt, option) {\n return new HammerCarousel(slt, option);\n };\n})(ipu || window, jQuery, Hammer);\n\n(function (ipu, $) {\r\n\r\n function __dealCssEvent(eventNameArr, callback) {\r\n var events = eventNameArr,\r\n i, dom = this;// jshint ignore:line\r\n\r\n function fireCallBack(e) {\r\n /*jshint validthis:true */\r\n if (e.target !== this) return;\r\n callback.call(this, e);\r\n for (i = 0; i < events.length; i++) {\r\n dom.off(events[i], fireCallBack);\r\n }\r\n }\r\n\r\n if (callback) {\r\n for (i = 0; i < events.length; i++) {\r\n dom.on(events[i], fireCallBack);\r\n }\r\n }\r\n }\r\n\r\n $.fn.transitionEnd = function (callback) {\r\n __dealCssEvent.call(this, ['webkitTransitionEnd', 'transitionend'], callback);\r\n return this;\r\n };\r\n\r\n var _modalTemplateTempDiv = document.createElement('div');\r\n\r\n var defaults = {\r\n modalTitle: '',\r\n modalStack: true,\r\n modalButtonOk: '确定',\r\n modalButtonCancel: '取消',\r\n modalPreloaderTitle: '加载中',\r\n modalContainer: document.body ? document.body : 'body'\r\n };\r\n\r\n ipu.modalStack = [];\r\n\r\n ipu.modalStackClearQueue = function () {\r\n if (ipu.modalStack.length) {\r\n (ipu.modalStack.shift())();\r\n }\r\n };\r\n\r\n ipu.modal = function (params) {\r\n params = params || {};\r\n var buttonsHTML = '';\r\n if (params.buttons && params.buttons.length > 0) {\r\n for (var i = 0; i < params.buttons.length; i++) {\r\n buttonsHTML += '<span class=\"ipu-modal-button' + (params.buttons[i].bold ? ' ipu-modal-button-bold' : '') + '\">' + params.buttons[i].text + '</span>';\r\n }\r\n }\r\n var extraClass = params.extraClass || '';\r\n var titleHTML = params.title ? '<div class=\"ipu-modal-title\">' + params.title + '</div>' : '';\r\n var textHTML = params.text ? '<div class=\"ipu-modal-text\">' + params.text + '</div>' : '';\r\n var afterTextHTML = params.afterText ? params.afterText : '';\r\n var noButtons = !params.buttons || params.buttons.length === 0 ? 'ipu-modal-no-buttons' : '';\r\n var verticalButtons = params.verticalButtons ? 'ipu-modal-buttons-vertical' : '';\r\n\r\n var modalHTML = '<div class=\"ipu-modal ' + extraClass + ' ' + noButtons + '\"><div class=\"ipu-modal-inner\">' + (titleHTML + textHTML + afterTextHTML) + '</div><div class=\"ipu-modal-buttons ' + verticalButtons + '\">' + buttonsHTML + '</div></div>';\r\n\r\n _modalTemplateTempDiv.innerHTML = modalHTML;\r\n\r\n var modal = $(_modalTemplateTempDiv).children();\r\n\r\n $(defaults.modalContainer).append(modal[0]);\r\n\r\n // Add events on buttons\r\n modal.find('.ipu-modal-button').each(function (index, el) {\r\n $(el).on('click', function (e) {\r\n if (params.buttons[index].close !== false) ipu.closeModal(modal);\r\n if (params.buttons[index].onClick) params.buttons[index].onClick(modal, e);\r\n if (params.onClick) params.onClick(modal, index);\r\n });\r\n });\r\n ipu.openModal(modal);\r\n return modal[0];\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 弹出警告消息\r\n *\r\n * @param {String} text 警句文本\r\n * @param {String} title 警告标题,可选参数\r\n * @param {Function} callbackOk 用户确认后的回调函数,可选参数\r\n */\r\n ipu.alert = function (text, title, callbackOk) {\r\n if (typeof title === 'function') {\r\n callbackOk = arguments[1];\r\n title = undefined;\r\n }\r\n return ipu.modal({\r\n text: text || '',\r\n title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n buttons: [{text: defaults.modalButtonOk, bold: true, onClick: callbackOk}]\r\n });\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 弹出确认消息\r\n *\r\n * @param {String} text 确认文本\r\n * @param {String} title 确认标题,可选参数\r\n * @param {Function} callbackOk 用户确认后的回调函数,可选参数\r\n * @param {Function} callbackCancel 用户确认后的回调函数,可选参数\r\n */\r\n ipu.confirm = function (text, title, callbackOk, callbackCancel) {\r\n if (typeof title === 'function') {\r\n callbackCancel = arguments[2];\r\n callbackOk = arguments[1];\r\n title = undefined;\r\n }\r\n return ipu.modal({\r\n text: text || '',\r\n title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n buttons: [\r\n {text: defaults.modalButtonCancel, bold: true, onClick: callbackCancel},\r\n {text: defaults.modalButtonOk, bold: true, onClick: callbackOk}\r\n ]\r\n });\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 弹出输入框\r\n *\r\n * @param {String} text 输入提示文本\r\n * @param {String} title 输入提示标题,可选参数\r\n * @param {Function} callbackOk 用户确认后的回调函数,可选参数\r\n * @param {Function} callbackCancel 用户确认后的回调函数,可选参数\r\n */\r\n ipu.prompt = function (text, title, callbackOk, callbackCancel) {\r\n if (typeof title === 'function') {\r\n callbackCancel = arguments[2];\r\n callbackOk = arguments[1];\r\n title = undefined;\r\n }\r\n return ipu.modal({\r\n text: text || '',\r\n title: typeof title === 'undefined' ? defaults.modalTitle : title,\r\n afterText: '<input type=\"text\" class=\"ipu-modal-text-input\">',\r\n buttons: [\r\n {\r\n text: defaults.modalButtonCancel\r\n },\r\n {\r\n text: defaults.modalButtonOk,\r\n bold: true\r\n }\r\n ],\r\n onClick: function (modal, index) {\r\n if (index === 0 && callbackCancel) callbackCancel($(modal).find('.ipu-modal-text-input').val());\r\n if (index === 1 && callbackOk) callbackOk($(modal).find('.ipu-modal-text-input').val());\r\n }\r\n });\r\n };\r\n\r\n var minLoad = false; // 是否最小时间调用方式\r\n var loadOverTime = false; // 是否超过最小调用时间\r\n var loadEnd = false; // 是否调用结束\r\n var loadTimeOut = null; // 延时调用ID\r\n\r\n /**\r\n * @member ipu\r\n * 弹出加载消息提示\r\n *\r\n * @param {String} title 加载提示文本\r\n * @param {Number} minTime 消息最小显示时间,单位ms,可选参数\r\n */\r\n ipu.showPreloader = function (title, minTime) {\r\n ipu.hidePreloader(true);\r\n\r\n ipu.showPreloader.preloaderModal = ipu.modal({\r\n title: title || defaults.modalPreloaderTitle,\r\n text: '<div class=\"ipu-preloader\"></div>'\r\n });\r\n\r\n if (minTime) {\r\n minLoad = true;\r\n loadTimeOut = setTimeout(function () {\r\n loadOverTime = true;\r\n if (loadEnd) {\r\n ipu.hidePreloader();\r\n }\r\n }, minTime);\r\n }\r\n\r\n return ipu.showPreloader.preloaderModal;\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 隐藏加载消息提示\r\n *\r\n * @param {Boolean} force 是否强制隐藏,不管最小提示时间,可选\r\n */\r\n ipu.hidePreloader = function (force) {\r\n if (force || !minLoad || (minLoad && loadOverTime)) {\r\n if (force && loadTimeOut) {\r\n window.clearTimeout(loadTimeOut);\r\n }\r\n ipu.showPreloader.preloaderModal && ipu.closeModal(ipu.showPreloader.preloaderModal);\r\n minLoad = false; // 重置各标志位\r\n loadOverTime = false;\r\n loadEnd = false;\r\n loadTimeOut = null;\r\n } else {\r\n loadEnd = true;\r\n }\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 显示加载状态\r\n */\r\n ipu.showIndicator = function () {\r\n if ($('.ipu-preloader-indicator-modal')[0]) return;\r\n $(defaults.modalContainer).append('<div class=\"ipu-preloader-indicator-overlay\"></div><div class=\"ipu-preloader-indicator-modal\"><span class=\"ipu-preloader ipu-preloader-white\"></span></div>');\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 隐藏加载状态\r\n */\r\n ipu.hideIndicator = function () {\r\n $('.ipu-preloader-indicator-overlay, .ipu-preloader-indicator-modal').remove();\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 显示操作选项\r\n *\r\n * @param{[[Object]]} actions\r\n * @param {Object} actions.Object\r\n * @param {String} actions.Object.text 操作名称\r\n * @param {Boolean} actions.Object.label 是否标签,非标签就是操作项,操作项有后续的配置,标签项无须后续配置项\r\n * @param {String:warning} actions.Object.color 样式,可选\r\n * @param {String:warning} actions.Object.bg 背景样式,可选\r\n * @param {Function} actions.Object.onClick 点击时回调函数\r\n */\r\n ipu.actions = function (params) {\r\n var modal, groupSelector, buttonSelector;\r\n params = params || [];\r\n\r\n if (params.length > 0 && !$.isArray(params[0])) {\r\n params = [params];\r\n }\r\n var modalHTML;\r\n var buttonsHTML = '';\r\n for (var i = 0; i < params.length; i++) {\r\n for (var j = 0; j < params[i].length; j++) {\r\n if (j === 0) buttonsHTML += '<div class=\"ipu-actions-modal-group\">';\r\n var button = params[i][j];\r\n var buttonClass = button.label ? 'ipu-actions-modal-label' : 'ipu-actions-modal-button';\r\n if (button.bold) buttonClass += ' ipu-actions-modal-button-bold';\r\n if (button.color) buttonClass += ' ipu-color-' + button.color;\r\n if (button.bg) buttonClass += ' ipu-bg-' + button.bg;\r\n if (button.disabled) buttonClass += ' disabled';\r\n buttonsHTML += '<span class=\"' + buttonClass + '\">' + button.text + '</span>';\r\n if (j === params[i].length - 1) buttonsHTML += '</div>';\r\n }\r\n }\r\n modalHTML = '<div class=\"ipu-actions-modal\">' + buttonsHTML + '</div>';\r\n _modalTemplateTempDiv.innerHTML = modalHTML;\r\n modal = $(_modalTemplateTempDiv).children();\r\n $(defaults.modalContainer).append(modal[0]);\r\n groupSelector = '.ipu-actions-modal-group';\r\n buttonSelector = '.ipu-actions-modal-button';\r\n\r\n var groups = modal.find(groupSelector);\r\n groups.each(function (index, el) {\r\n var groupIndex = index;\r\n $(el).children().each(function (index, el) {\r\n var buttonIndex = index;\r\n var buttonParams = params[groupIndex][buttonIndex];\r\n var clickTarget;\r\n if ($(el).is(buttonSelector)) clickTarget = $(el);\r\n // if (toPopover && $(el).find(buttonSelector).length > 0) clickTarget = $(el).find(buttonSelector);\r\n\r\n if (clickTarget) {\r\n clickTarget.on('click', function (e) {\r\n if (buttonParams.close !== false) ipu.closeModal(modal);\r\n if (buttonParams.onClick) buttonParams.onClick(modal, e);\r\n });\r\n }\r\n });\r\n });\r\n ipu.openModal(modal);\r\n return modal[0];\r\n };\r\n\r\n //显示一个消息,会在2秒钟后自动消失\r\n /**\r\n * @member ipu\r\n * 悬浮提示消息\r\n *\r\n * @param {String} msg 消息文本\r\n * @param {Number} duration=2000 消息显示时间,单位ms\r\n */\r\n ipu.toast = function (msg, duration, extraclass) {\r\n var $toast = $('<div class=\"ipu-modal ipu-toast ' + (extraclass || '') + '\">' + msg + '</div>').appendTo(document.body);\r\n ipu.openModal($toast, function () {\r\n setTimeout(function () {\r\n ipu.closeModal($toast);\r\n }, duration || 2000);\r\n });\r\n };\r\n\r\n ipu.openModal = function (modal, cb) {\r\n modal = $(modal);\r\n var isModal = modal.hasClass('ipu-modal'),\r\n isNotToast = !modal.hasClass('ipu-toast');\r\n isNotToast = false; // 强制打开新窗口\r\n\r\n if ($('.ipu-modal.ipu-modal-in:not(.ipu-modal-out)').length && defaults.modalStack && isModal && isNotToast) {\r\n ipu.modalStack.push(function () {\r\n ipu.openModal(modal, cb);\r\n });\r\n return;\r\n }\r\n\r\n var isPopup = modal.hasClass('ipu-popup');\r\n var isLoginScreen = modal.hasClass('ipu-login-screen');\r\n var isPickerModal = modal.hasClass('ipu-picker-modal');\r\n var isToast = modal.hasClass('ipu-toast');\r\n\r\n if (isModal) {\r\n modal.show();\r\n modal.css({\r\n marginTop: -Math.round(modal.outerHeight() / 2) + 'px'\r\n });\r\n }\r\n\r\n if (isToast) {\r\n modal.css({\r\n marginLeft: -Math.round(modal.outerWidth() / 2) + 'px' //1.185 是初始化时候的放大效果\r\n });\r\n }\r\n\r\n var overlay;\r\n if (!isLoginScreen && !isPickerModal && !isToast) {\r\n if ($('.ipu-modal-overlay').length === 0 && !isPopup) {\r\n $(defaults.modalContainer).append('<div class=\"ipu-modal-overlay\"></div>');\r\n }\r\n if ($('.ipu-popup-overlay').length === 0 && isPopup) {\r\n $(defaults.modalContainer).append('<div class=\"ipu-popup-overlay\"></div>');\r\n }\r\n overlay = isPopup ? $('.ipu-popup-overlay') : $('.ipu-modal-overlay');\r\n }\r\n\r\n //Make sure that styles are applied, trigger relayout;\r\n var clientLeft = modal[0].clientLeft;\r\n\r\n // Trugger open event\r\n modal.trigger('open');\r\n\r\n // Picker modal body class\r\n if (isPickerModal) {\r\n $(defaults.modalContainer).addClass('ipu-with-picker-modal');\r\n }\r\n\r\n // Classes for transition in\r\n if (!isLoginScreen && !isPickerModal && !isToast) {\r\n overlay.addClass('ipu-modal-overlay-visible');\r\n }\r\n modal.removeClass('ipu-modal-out').addClass('ipu-modal-in').transitionEnd(function (e) {\r\n if (modal.hasClass('ipu-modal-out')) modal.trigger('closed');\r\n else modal.trigger('opened');\r\n });\r\n // excute callback\r\n if (typeof cb === 'function') {\r\n cb.call(this);\r\n }\r\n return true;\r\n };\r\n\r\n ipu.closeModal = function (modal) {\r\n modal = $(modal || '.ipu-modal-in');\r\n if (typeof modal !== 'undefined' && modal.length === 0) {\r\n return;\r\n }\r\n var isModal = modal.hasClass('ipu-modal'),\r\n isPopup = modal.hasClass('ipu-popup'),\r\n isToast = modal.hasClass('ipu-toast'),\r\n isLoginScreen = modal.hasClass('ipu-login-screen'),\r\n isPickerModal = modal.hasClass('ipu-picker-modal'),\r\n removeOnClose = modal.hasClass('ipu-remove-on-close'),\r\n overlay = isPopup ? $('.ipu-popup-overlay') : $('.ipu-modal-overlay');\r\n if (isPopup) {\r\n if (modal.length === $('.ipu-popup.ipu-modal-in').length) {\r\n overlay.removeClass('ipu-modal-overlay-visible');\r\n }\r\n }\r\n else if (!(isPickerModal || isToast)) {\r\n overlay.removeClass('ipu-modal-overlay-visible');\r\n }\r\n modal.trigger('close');\r\n\r\n // Picker modal body class\r\n if (isPickerModal) {\r\n $(defaults.modalContainer).removeClass('ipu-with-picker-modal');\r\n $(defaults.modalContainer).addClass('ipu-picker-modal-closing');\r\n }\r\n\r\n modal.removeClass('ipu-modal-in').addClass('ipu-modal-out').transitionEnd(function (e) {\r\n if (modal.hasClass('ipu-modal-out')) modal.trigger('closed');\r\n else modal.trigger('opened');\r\n\r\n if (isPickerModal) {\r\n $(defaults.modalContainer).removeClass('ipu-picker-modal-closing');\r\n }\r\n if (isPopup || isLoginScreen || isPickerModal) {\r\n modal.removeClass('ipu-modal-out').hide();\r\n if (removeOnClose && modal.length > 0) {\r\n modal.remove();\r\n }\r\n }\r\n else {\r\n modal.remove();\r\n }\r\n });\r\n if (isModal && defaults.modalStack) {\r\n ipu.modalStackClearQueue();\r\n }\r\n\r\n return true;\r\n };\r\n\r\n function handleClicks(e) {\r\n /*jshint validthis:true */\r\n var clicked = $(this);\r\n var url = clicked.attr('href');\r\n\r\n\r\n //Collect Clicked data- attributes\r\n /* var clickedData = clicked.dataset();\r\n\r\n // Popup\r\n var popup;\r\n if (clicked.hasClass('ipu-open-popup')) {\r\n if (clickedData.popup) {\r\n popup = clickedData.popup;\r\n }\r\n else popup = '.ipu-popup';\r\n ipu.popup(popup);\r\n }\r\n if (clicked.hasClass('ipu-close-popup')) {\r\n if (clickedData.popup) {\r\n popup = clickedData.popup;\r\n }\r\n else popup = '.ipu-popup.modal-in';\r\n ipu.closeModal(popup);\r\n }*/\r\n\r\n // Close Modal\r\n if (clicked.hasClass('ipu-modal-overlay')) {\r\n if ($('.ipu-modal.ipu-modal-in').length > 0 && defaults.modalCloseByOutside)\r\n ipu.closeModal('.ipu-modal.ipu-modal-in');\r\n if ($('.ipu-actions-modal.ipu-modal-in').length > 0 && defaults.actionsCloseByOutside)\r\n ipu.closeModal('.ipu-actions-modal.ipu-modal-in');\r\n\r\n }\r\n if (clicked.hasClass('ipu-popup-overlay')) {\r\n if ($('.ipu-popup.ipu-modal-in').length > 0 && defaults.popupCloseByOutside)\r\n ipu.closeModal('.ipu-popup.modal-in');\r\n }\r\n }\r\n\r\n $(document).on('click', ' .ipu-modal-overlay, .ipu-popup-overlay, .ipu-close-popup, .ipu-open-popup, .ipu-close-picker', handleClicks);\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $) {\r\n /**\r\n * @class 导航切换组件\r\n *\r\n * @example\r\n *\r\n * <!-- 组件的html分成导航和内容两部分,一般与flex栅格配合布局-->\r\n *\r\n * <!-- 组件导航部分 -->\r\n * <nav class=\"ipu-navbar \">\r\n * <a class=\"ipu-navbar-item \" href=\"javascript:;\">\r\n * <span class=\"ipu-icon fa fa-home\"></span>\r\n * <span class=\"ipu-navbar-item-label\">插件</span>\r\n * </a>\r\n * <a class=\"ipu-navbar-item \" href=\"javascript:;\">\r\n * <span class=\"ipu-icon fa fa-dashcube\"></span>\r\n * <span class=\"ipu-navbar-item-label\">JS组件</span>\r\n * </a>\r\n * <a class=\"ipu-navbar-item ipu-current\" href=\"javascript:;\">\r\n * <span class=\"ipu-icon fa fa-map\"></span>\r\n * <span class=\"ipu-navbar-item-label\">静态组件</span>\r\n * </a>\r\n * <a class=\"ipu-navbar-item\" href=\"javascript:;\">\r\n * <span class=\"ipu-icon fa fa-mortar-board\"></span>\r\n * <span class=\"ipu-navbar-item-label\">更多</span>\r\n * </a>\r\n * </nav>\r\n *\r\n * <!-- 内容部分 -->\r\n * <div class=\"ipu-nav-content\">\r\n * <ul>\r\n * <li>\r\n * 自定义内容1\r\n * </li>\r\n * <li>\r\n * 自定义内容\r\n * </li>\r\n * <li>\r\n * 自定义内容\r\n * </li>\r\n * <li>\r\n * 自定义内容\r\n * </li>\r\n * </ul>\r\n * </div>\r\n *\r\n *\r\n * @constructor 不能直接访问该类,调用{@link ipu#navBar ipu.navBar(slt, option)}生成实例\r\n * @param {String|jqueryObj} slt jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom\r\n * @param {Object} option 组件配置参数,默认配置见 {@link #cfg-defaultOption}\r\n */\r\n function NavBar(slt, option) {\r\n this.option = $.extend({}, this.defaultOption, option);\r\n this.content = $(this.option.contentSlt);\r\n this.nav = $(slt);\r\n this.wrapper = $(\">ul\", this.content);\r\n this.contents = $(\">li\", this.wrapper);\r\n this.navs = $(\">a\", this.nav);\r\n var me = this;\r\n\r\n var activeIndex = this.navs.filter(\".ipu-current\").index(); // 查找默认有active的索引\r\n if (activeIndex == -1) {\r\n activeIndex = this.contents.filter(\".ipu-current\").index(); // 查找默认有active的索引\r\n }\r\n this.option.index = activeIndex != -1 ? activeIndex : 0;\r\n\r\n if (!this.option.animate) {\r\n this.wrapper.addClass(\"ipu-no-animation\")\r\n }\r\n\r\n this.navs.each(function (index, i) {\r\n $(this).click(function () {\r\n me.show(index);\r\n });\r\n });\r\n\r\n this.lastIndex = null;\r\n this.currentIndex = null;\r\n me.show(this.option.index);\r\n }\r\n\r\n /**\r\n * 组件默认配置项\r\n *\r\n * @cfg {Object} defaultOption\r\n * @cfg {Boolean} defaultOption.animate=false 切换时是否添加动画效果\r\n * @cfg {Dom|String|JqueryObj} defaultOption.contentSlt='.ipu-nav-content' 内容dom选择器,页面有多个navBar组件时,需要设置此值\r\n * @cfg {Function} defaultOption.callBack 切换时的回调函数\r\n * @cfg {Number} defaultOption.callBack.index 当前显示项索引\r\n */\r\n NavBar.prototype.defaultOption = {\r\n animate: false,\r\n contentSlt: \".ipu-nav-content\",\r\n callBack: function (currentIndex, lastIndex) {\r\n }\r\n };\r\n\r\n /**\r\n * 显示第几项内容\r\n * @param {Number} index 显示内容项索引\r\n */\r\n NavBar.prototype.show = function (index) {\r\n if (this.currentIndex != index) {\r\n $(this.contents[index]).addClass(\"ipu-show\");\r\n\r\n if (this.option.animate) {\r\n if (this.lastIndex != null && this.lastIndex != index) {\r\n $(this.contents[this.lastIndex]).removeClass(\"ipu-show\"); // 隐藏上上个元素\r\n }\r\n\r\n if (this.currentIndex != null) { // 非第一次需要动画效果\r\n if (this.currentIndex < index) { // 需要内容为往左走,显示右边的内容\r\n if (this.lastIndex != null && this.lastIndex < this.currentIndex) { // 内容已经左走过了,则需要移除动画复原位置,再通过width()方法强制生效\r\n this.wrapper.addClass(\"ipu-no-animation\").removeClass(\"ipu-nav-content-right\").width(); // 可以强制刷新,默认jquery应该会将这些dom上的修改延时处理?\r\n }\r\n } else {\r\n if (this.lastIndex == null || this.lastIndex > this.currentIndex) { // 类似同上\r\n this.wrapper.addClass(\"ipu-no-animation\").addClass(\"ipu-nav-content-right\").width(); // 可以强制刷新不?\r\n }\r\n }\r\n this.wrapper.removeClass(\"ipu-no-animation\").toggleClass(\"ipu-nav-content-right\");\r\n }\r\n } else {\r\n $(this.contents[this.currentIndex]).removeClass(\"ipu-show\");\r\n }\r\n\r\n // 更新class,ipu-current状态\r\n $(this.contents[index]).addClass(\"ipu-current\").siblings(\".ipu-current\").removeClass(\"ipu-current\");\r\n $(this.navs[index]).addClass(\"ipu-current\").siblings(\".ipu-current\").removeClass(\"ipu-current\");\r\n\r\n this.lastIndex = this.currentIndex;\r\n this.currentIndex = index;\r\n\r\n if (this.option.callBack) {\r\n this.option.callBack(this.currentIndex, this.lastIndex);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 生成NavBar实例,参数信息见{@link NavBar#method-constructor}\r\n *\r\n * @param {String} slt\r\n * @param {Object} option\r\n * @returns {NavBar}\r\n */\r\n ipu.navBar = function (slt, option) {\r\n return new NavBar(slt, option);\r\n };\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $) {\r\n function __dealCssEvent(eventNameArr, callback) {\r\n var events = eventNameArr,\r\n i, dom = this;// jshint ignore:line\r\n\r\n function fireCallBack(e) {\r\n if (e.target !== this) return;\r\n callback.call(this, e);\r\n for (i = 0; i < events.length; i++) {\r\n dom.off(events[i], fireCallBack);\r\n }\r\n }\r\n\r\n if (callback) {\r\n for (i = 0; i < events.length; i++) {\r\n dom.on(events[i], fireCallBack);\r\n }\r\n }\r\n }\r\n\r\n $.fn.animationEnd = function (callback) {\r\n __dealCssEvent.call(this, ['webkitAnimationEnd', 'animationend'], callback);\r\n return this;\r\n };\r\n\r\n function submitForm(doc, url, params) {\r\n var form = doc.createElement(\"form\");\r\n form.action = url;\r\n form.method = \"post\";\r\n form.style.display = \"none\";\r\n\r\n for (var x in params) {\r\n var ele = doc.createElement(\"input\");\r\n ele.type = \"hidden\";\r\n ele.name = x;\r\n ele.value = params[x];\r\n form.appendChild(ele);\r\n }\r\n\r\n doc.body.appendChild(form);\r\n form.submit();\r\n }\r\n\r\n // 检查是否有ipu-pages的结构\r\n function checkPages() {\r\n if (!hasPages) {\r\n pagesObj = $(\".ipu-pages\"); // pagesObj为空则进行jquery取值\r\n if (pagesObj.size() == 0) {\r\n pagesObj = $(\"<div class='ipu-pages'><div class='ipu-page ipu-show \" + zeroPageClass + \"' id='\" + pageIdPrefix + \"0'></div>\").appendTo(\"body\");\r\n }\r\n hasPages = true;\r\n }\r\n }\r\n\r\n // 站位页面\r\n function isZeroPage(page) {\r\n return $(page).hasClass(zeroPageClass);\r\n }\r\n\r\n var page = {};\r\n var hasPages = false;\r\n var maps = {};\r\n var pageNo = 1; // 编号0留给主页面或当前页面,或没有\r\n var pageIdPrefix = \"ipuPage-\";\r\n var pagesObj = null;\r\n var animateInClass = \"ipu-anim ipu-slideRightIn\";\r\n var animateOutClass = \"ipu-anim ipu-slideRightOut\";\r\n var eventName = \"ipuUIPageBack\";\r\n var zeroPageClass = 'ipu-page-zero'; // 占位页面,对于为当前页面\r\n var zeroPagesClass = 'ipu-pages-zero'; // 占位页面的特殊class,作用已忘记,应该是用来标记显示用\r\n\r\n /**\r\n * @private\r\n * @class page 单页面实现功能对象\r\n * 以iframe加载子页面的方式,页面后退(后退时,后退到a页面,所有在a页面后打开的页面全都关闭)\r\n * ipu框架在浏览器运行时,使用此对象实现与客户端运行类似的效果\r\n * 大致实现是当前页面进行处理,所有的后续页面加载都放在一个iframe中,所有页面按加载顺序排序,关闭或后退按页面打开的顺序处理\r\n */\r\n\r\n\r\n /**\r\n * 组件默认配置项\r\n *\r\n * @cfg {Object} defaultOption page组件默认配置项\r\n * @cfg {Window} defaultOption.target = window.parent 默认执行的窗口对象,子页面调用相关方法,默认都都是在parent窗口执行,需要指定此参数,如顶层父窗口\r\n * @cfg {Number} defaultOption.backIndex=-1 回退索引,大于0时,正序计算,小于0时,倒序计算,-1即为当页面的上一个页面\r\n * @cfg {Number} defaultOption.closeIndex 关闭页面索引,参数说明同上\r\n * @cfg {Object} defaultOption.params Json格式参数,POST方式打开页面时,使用此参数传递参数,暂不支持数组格式参数\r\n * @cfg {Boolean} defaultOption.animate=true 是否使用动画,打开或回退页面时有效参数\r\n * @cfg {Boolean} defaultOption.showLoading=true 是否显示加载提示,打开或回退页面时有效参数\r\n * @cfg {Boolean} defaultOption.loadingMessage='正在加载中' 是否显示加载提示,打开或回退页面时有效参数\r\n * @cfg defaultOption.data=null 回退页面时,传递给回退到的页面的参数,回退到的页面有设置监听函数时,监听函数可以接收此参数\r\n * @cfg {String} defaultOption.pageName='' 页面的名称,打开或回退页面时有效参数\r\n * @cfg {Number} defaultOption.pageMax='' 保留的最大页面数,大于2\r\n * @cfg {Function} defaultOption.callBack 方法执行结束时的回调函数\r\n */\r\n page.defaultOption = { // 那个窗口执行open,默认父窗口\r\n target: window.parent, // 默认执行父窗口,方法:all\r\n backIndex: -1, // 默认回退一页 方法:back\r\n closeIndex: -1, // 默认关闭最近一个页面 方法:close\r\n params: {}, // post的传参 方法:post\r\n animate: true, // 是否动画效果 方法:open post\r\n showLoading: true, // 是否显示加载消息 方法:open post\r\n loadingMessage: '正在加载中', // 方法:open post\r\n method: null, // 请求方式,内置参数,方法自己设置,用户不需要设置 方法:无\r\n minMessageTime: 500, // 最小显示加载时间,避免出现闪现的情况 方法:open post\r\n data: null, // 回退时,回传参数, 方法:back\r\n pageName: '', // 给打开的页面命名,以便根据此页面名称来切换页面 方法:open post back close\r\n pageMax: 6, // 允许的最大打开页面数\r\n callBack: function () { // 事件回调 方法:open post close back\r\n }\r\n };\r\n\r\n // 新增限制最大页面数\r\n page.limitPages = function () {\r\n var pageMax = this.defaultOption.pageMax - 2; //\r\n $(\".ipu-page.ipu-show\").prevAll(\".ipu-page:gt(\" + pageMax + \")\").remove();\r\n };\r\n\r\n // 当前页面加载,针对顶层父窗口\r\n page.openPage = function (url, option) {\r\n var newPage = null;\r\n var nowPageNo = pageIdPrefix + (pageNo++);\r\n maps[nowPageNo] = url;\r\n\r\n checkPages();\r\n\r\n if (option.showLoading) {\r\n ipu.showPreloader(option.loadingMessage, option.minMessageTime);\r\n }\r\n\r\n if (option.method == 'post') {\r\n newPage = $(\"<div class='ipu-page' id='\" + nowPageNo + \"' data-name='\" + option.pageName + \"'><iframe class='ipu-page-iframe'></iframe></div>\");\r\n } else {\r\n newPage = $(\"<div class='ipu-page' id='\" + nowPageNo + \"' data-name='\" + option.pageName + \"'><iframe class='ipu-page-iframe' src='\" + url + \"'></iframe></div>\");\r\n }\r\n\r\n var zeroPage = isZeroPage($(\".ipu-page:last\", pagesObj));\r\n var animatePage = newPage;\r\n if (zeroPage) {\r\n animatePage = pagesObj.addClass(zeroPagesClass);\r\n }\r\n\r\n function end() {\r\n if (option.showLoading) {\r\n ipu.hidePreloader();\r\n }\r\n\r\n if (option.animate) {\r\n console.log(\"--\" + nowPageNo);\r\n animatePage.removeClass(animateInClass);\r\n }\r\n\r\n newPage.siblings(\".ipu-show\").removeClass('ipu-show');\r\n if (option.callBack) {\r\n option.callBack();\r\n }\r\n\r\n // 新增限制最大页面数\r\n page.limitPages();\r\n }\r\n\r\n $(\".ipu-page-iframe\", newPage).one('load', function () {\r\n newPage.addClass(\"ipu-show\").width(); // 强制生效,否则可能出现页面闪现,无动画情况\r\n\r\n if (zeroPage) {\r\n animatePage.removeClass(zeroPagesClass);\r\n }\r\n if (option.animate) {\r\n animatePage.addClass(animateInClass).animationEnd(end);\r\n } else {\r\n end();\r\n }\r\n });\r\n\r\n newPage.appendTo(pagesObj);\r\n if (option.method == 'post') {\r\n var pageDoc = $(\".ipu-page-iframe\", newPage)[0].contentDocument;\r\n submitForm(pageDoc, url, option.params);\r\n }\r\n };\r\n\r\n // post方式加载页面\r\n page.postPage = function (url, option) {\r\n option.method = 'post';\r\n page.openPage(url, option);\r\n };\r\n\r\n // 当前页面后退,针对顶层父窗口\r\n page.backPage = function (option) {\r\n var backIndex = option.backIndex;\r\n var page = null;\r\n var nowPage = $(\".ipu-page.ipu-show\", pagesObj);\r\n\r\n if (option.pageName) {\r\n page = $(\".ipu-page[data-name='\" + option.pageName + \"']:first\", pagesObj);\r\n } else if (backIndex == 0) {\r\n page = $(\".ipu-page:first\", pagesObj);\r\n } else { // 越界的情况\r\n var prevPage = nowPage.prevAll(\".ipu-page\");\r\n if (backIndex < 0) {\r\n page = $(prevPage[-backIndex - 1]);\r\n } else {\r\n page = $(prevPage[prevPage.size() - backIndex]);\r\n }\r\n }\r\n\r\n var animatePage = nowPage;\r\n var zeroPage = isZeroPage(page);\r\n\r\n // 主页面模式时\r\n if (zeroPage) {\r\n animatePage = pagesObj;\r\n } else {\r\n page.addClass(\"ipu-show\"); //显示前一个\r\n }\r\n\r\n function end() {\r\n $(this).removeClass(animateOutClass);\r\n page.nextAll(\".ipu-page\").remove();\r\n\r\n var iframe = $(\".ipu-page-iframe\", page);\r\n var nowDoc;\r\n\r\n if (iframe.size() == 0) { // 找不到子窗口就当是返回了主页面,在当前窗口触发\r\n nowDoc = window.document;\r\n } else {\r\n nowDoc = iframe[0].contentDocument;\r\n }\r\n\r\n if (zeroPage) {\r\n pagesObj.addClass(zeroPagesClass);\r\n }\r\n\r\n var evt = nowDoc.createEvent('Event');\r\n evt.initEvent(eventName, true, true);\r\n if (option.data) {\r\n evt.data = option.data;\r\n }\r\n nowDoc.body.dispatchEvent(evt);\r\n if (option.callBack) {\r\n option.callBack();\r\n }\r\n }\r\n\r\n if (option.animate) {\r\n animatePage.addClass(animateOutClass).animationEnd(end);\r\n } else {\r\n end();\r\n }\r\n };\r\n\r\n // 往前关闭窗口\r\n page.closePage = function (option) {\r\n var closeIndex = option.closeIndex;\r\n var prevPage = $(\".ipu-page.ipu-show\", pagesObj).prevAll(\".ipu-page\");\r\n\r\n if (option.pageName) {\r\n closeIndex = $(\".ipu-page[data-name='\" + option.pageName + \"']:first\", pagesObj).index();\r\n } else if (closeIndex < 0) {\r\n closeIndex = -closeIndex - 1;\r\n } else {\r\n closeIndex = prevPage.size() - closeIndex;\r\n }\r\n\r\n $(prevPage[closeIndex]).remove();\r\n if (option.callBack) {\r\n option.callBack();\r\n }\r\n };\r\n\r\n /**\r\n * get请求的方式加载页面\r\n *\r\n * @param {String} url\r\n * @param {Object} option 回退参数,见{@link #cfg-defaultOption}\r\n */\r\n page.open = function (url, option) {\r\n option = $.extend({}, this.defaultOption, option);\r\n option.target.ipu.page.openPage(url, option);\r\n };\r\n\r\n /**\r\n * 使用post方式加载一个新页面\r\n *\r\n * @param {String} url 要打开的页面地址\r\n * @param {Object} option 回退参数,见{@link #cfg-defaultOption}\r\n */\r\n page.post = function (url, option) {\r\n option = $.extend({}, this.defaultOption, option);\r\n option.method = 'post';\r\n option.target.ipu.page.openPage(url, option);\r\n };\r\n\r\n /**\r\n * 回退到某个历史页面,可以根据pageName回退,也可根据backIndex回退,默认回退上一个页面\r\n *\r\n * @param {Object} option 回退参数,见{@link #cfg-defaultOption}\r\n */\r\n page.back = function (option) {\r\n option = $.extend({}, this.defaultOption, option);\r\n option.target.ipu.page.backPage(option);\r\n };\r\n\r\n /**\r\n * 回退到首页\r\n *\r\n * @param {Object} option 回退参数,见{@link #cfg-defaultOption}\r\n */\r\n page.backHome = function (option) {\r\n option = option || {};\r\n option.backIndex = 0;\r\n page.back(option);\r\n };\r\n\r\n // 子窗口,待确认\r\n page.close = function (option) {\r\n option = $.extend({}, this.defaultOption, option);\r\n option.target.ipu.page.closePage(option);\r\n };\r\n\r\n /**\r\n * 给页面增加一个监听,从其它页面回退到此页面,调用此函数,可以接收其它页面传来的数据\r\n *\r\n * @param {Function} back 监听函数\r\n * @param back.data 其它页面传过来的参数,推荐字符串或Json对象\r\n */\r\n page.onBack = function (back) {\r\n $(\"body\").on(eventName, function (e) {\r\n var data = e.originalEvent.data;\r\n back(data);\r\n });\r\n };\r\n\r\n // 提供一个关闭一群窗口的方法\r\n ipu.page = page;\r\n})(ipu || window, jQuery);\r\n\n// picker\r\n(function (ipu, $, Hammer) {\r\n var showItemSize = 9; // 显示的子项数量,\r\n var r = 90; // 计算旋转的圆半径,结果应该缩小,是为了r不要距离容器太近,是否不应该设置px,使用rem\r\n var itemAngle = 180 / showItemSize; // 每项对应的角度是 180/9 = 20\r\n var maxExceed = itemAngle; // 滚动时允许超出边界的最大角度,允许最多翻过一项\r\n // itemHeight = 40px;每项数据的高度设置 // 需要给出r=89是怎么计算出来的,是根据 40/2/Math.tan(40/2/180*Math.PI)=113,直接太大不好看\r\n\r\n\r\n function toRem(num) {\r\n return num / 100;\r\n }\r\n\r\n /**\r\n * @private\r\n * @class 选择器,被DtPicker和PopPicker使用,实现选择与滚动等基础功能\r\n *\r\n * @constructor 初始化方法\r\n * @param {String|DOM|JQueryObj} slt\r\n * @param {object} option 组件参数,默认配置见 {@link #cfg-defaultOption}\r\n */\r\n function Picker(slt, option) {\r\n this.el = $(slt)[0];\r\n this.option = $.extend({}, this.defaultOption, option);\r\n this._init();\r\n }\r\n\r\n /**\r\n * 组件默认配置项\r\n *\r\n * @cfg {Object} defaultOption=\r\n * @cfg {Boolean} defaultOption.listen=true 是否需要监听变化\r\n * @cfg {[Object]} defaultOption.data=[] 可选择项数组,每个项须有text属性\r\n * @cfg {String} defaultOption.data.text 子项展示文本\r\n * @cfg {Function} defaultOption.onChange=null 选择变化时的回调函数\r\n * @cfg {Object} defaultOption.onChange.sltItem 选中项\r\n * @cfg {Number} defaultOption.onChange.newIndex 新的选中项索引\r\n * @cfg {Number} defaultOption.onChange.oldIndex 旧的选中项索引\r\n * @cfg {Boolean} defaultOption.onChange.newData 是否为调用setItem()方法触发\r\n */\r\n Picker.prototype.defaultOption = {\r\n listen: true,\r\n data: [],\r\n onChange: null\r\n };\r\n\r\n Picker.prototype._init = function () {\r\n var self = this;\r\n this.wrap = $(\">ul\", this.el);\r\n this.index = null; // 选中项索引\r\n this.listen = !!this.option.listen;\r\n\r\n this.beginAngle = 0; // 开始角度\r\n this.beginExceed = this.beginAngle - maxExceed; // 最小角度值\r\n this.stopInertiaMove = false;\r\n this.lastAngle = null; // 保存滑动前的角度 // 当前滚动的角度\r\n\r\n // 如果是ios,则ul的旋转中心点,样式不同于android\r\n if (ipu.device.ios) {\r\n this.wrap.css(\"transform-origin\", \"center center \" + toRem(r) + \"rem\"); //如果是ios,要变更旋转的中心点\r\n }\r\n\r\n\r\n this.setItems(this.option.data);\r\n\r\n this.hammer = new Hammer.Manager(this.el);\r\n this.hammer.add(new Hammer.Pan({direction: Hammer.DIRECTION_VERTICAL, threshold: 5}));\r\n this.hammer.add(new Hammer.Press({threshold: 4})); //\r\n this.hammer.on(\"panstart panmove panend pancancel\", Hammer.bindFn(this._onPan, this));\r\n\r\n // 处理滚动中,用户点中某项,停止\r\n this.hammer.on(\"press pressup\", function (e) { // 如果用户点击了,是停止自动滚动\r\n if (this.empty) {\r\n return;\r\n }\r\n\r\n self.stopInertiaMove = true;\r\n if (e.type == 'pressup') {\r\n self.endScroll();\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * 设置选择项\r\n *\r\n * @param {[Object]} data 设置项数组\r\n */\r\n Picker.prototype.setItems = function (data, textName) { // textNam字体暂不支持\r\n this.wrap.empty(); // 清空历史数据\r\n this.data = data = data || [];\r\n this.empty = data.length == 0; // 数据是否为空\r\n\r\n this.newData = true; // 是否为新设置数据标记\r\n var self = this;\r\n var lis = \"\";\r\n textName = textName || 'text';\r\n\r\n for (var i = 0, j = data.length; i < j; i++) {\r\n lis = lis + \"<li>\" + data[i][textName] + \"</li>\";\r\n }\r\n\r\n $(lis).appendTo(this.wrap);\r\n\r\n this.items = $(\">li\", this.wrap);\r\n this.itemsSize = this.items.size();\r\n\r\n this.endAngle = (this.empty ? 0 : this.itemsSize - 1) * itemAngle;\r\n this.endExceed = this.endAngle + maxExceed; // 最大旋转角度值\r\n\r\n // 初始化各子项角度\r\n this.items.each(function (i) {\r\n $(this).css({\r\n \"transform\": \"translateZ(\" + toRem(r) + \"rem) rotateX(-\" + (i * itemAngle) + \"deg)\",\r\n \"transform-origin\": \"center center -\" + toRem(r) + \"rem\"\r\n });\r\n $(this).click(function () {\r\n self.stopInertiaMove = true;\r\n self.setAngle(i * itemAngle, true);\r\n })\r\n });\r\n\r\n var newAngle;\r\n if (this.empty || this.index == null) {\r\n newAngle = 0;\r\n } else {\r\n if (this.index > this.itemsSize - 1) { // 取最大值\r\n newAngle = (this.itemsSize - 1) * itemAngle;\r\n } else {\r\n newAngle = this.index * itemAngle;\r\n }\r\n }\r\n this.setAngle(newAngle, true);\r\n };\r\n\r\n Picker.prototype._onPan = function (ev) {\r\n if (this.empty) {\r\n return;\r\n }\r\n\r\n //console.log(ev.deltaX + \"==\"+ ev.deltaY);\r\n if (ev.type == 'panstart') { // 好像一定要移动才有startg事件\r\n self.stopInertiaMove = true;\r\n this.lastAngle = this.angle;\r\n this.wrap.addClass(\"ipu-noanimate\"); // 移除动画\r\n this.stopInertiaMove = true; // 停止自动减速滚动\r\n\r\n } else if (ev.type == 'panmove') {\r\n var moveAngle = this.calcAngle(ev.deltaY);\r\n var newAngle = this.lastAngle - moveAngle; //最新的角度\r\n //console.log('=='+newAngle);\r\n // 一个可以转动的最小值和最大值过滤\r\n if (newAngle < this.beginExceed) {\r\n newAngle = this.beginExceed;\r\n }\r\n if (newAngle > this.endExceed) {\r\n newAngle = this.endExceed;\r\n }\r\n this.setAngle(newAngle);\r\n\r\n } else { // end or cancel事件\r\n // console.log('end or cancel:' + ev.type);\r\n var v = ev.overallVelocityY; // 滑动的速度\r\n var dir = v > 0 ? -1 : 1; //加速度方向\r\n var deceleration = dir * 0.0006 * -1;\r\n var duration = Math.abs(v / deceleration); // 速度消减至0所需时间\r\n var dist = v * duration / 2; //最终移动多少\r\n\r\n var startAngle = this.angle;\r\n var distAngle = -this.calcAngle(dist);\r\n // console.log(\"dist=\" + dist + \", distAngle\" + distAngle);\r\n\r\n //----\r\n var srcDistAngle = distAngle;\r\n if (startAngle + distAngle < this.beginExceed) {\r\n distAngle = this.beginExceed - startAngle;\r\n duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n }\r\n if (startAngle + distAngle > this.endExceed) {\r\n distAngle = this.endExceed - startAngle;\r\n duration = duration * (distAngle / srcDistAngle) * 0.6;\r\n }\r\n\r\n if (distAngle == 0) {\r\n this.endScroll();\r\n return;\r\n }\r\n this.scrollDistAngle(startAngle, distAngle, duration);\r\n }\r\n };\r\n\r\n // 计算移动的角度,转动的角度,就是移动的距离对应相关圆周\r\n // 2*r*PI = 360, angle = 360*c/(2*r*PI)\r\n var ca = 360 / (2 * r * Math.PI);\r\n Picker.prototype.calcAngle = function (c) {\r\n return c * ca;\r\n };\r\n\r\n /**\r\n * 为组件设置新的滚动角度\r\n *\r\n * @param {Number} newAngle 新的滚动角度\r\n * @param {Boolean} endScroll 是否为最终滚动角度,为最终滚动角度时,若索引更新可以触发onChange的回调\r\n */\r\n Picker.prototype.setAngle = function (newAngle, endScroll) {\r\n this.angle = newAngle; // 存储最新值\r\n this.wrap.css(\"transform\", \"perspective(\" + toRem(1000) + \"rem) rotateY(0deg) rotateX(\" + newAngle + \"deg)\");\r\n this.calcItemVisable(newAngle);\r\n\r\n if (endScroll) {\r\n var index = newAngle / itemAngle;\r\n var oldIndex = this.index;\r\n this.index = this.empty ? null : index; // 这里可以做一个判断,如果是empty,则index值可以不改变\r\n\r\n // 这个地方要判断下,数据更新或索引更新都要触发\r\n if (oldIndex != index || this.newData) {\r\n if (this.option.onChange && this.listen) {\r\n this.option.onChange(this.getSelectedItem(), this.index, oldIndex, this.newData);\r\n }\r\n this.newData = false;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * 计算各子项滚动角度与新的滚动角度的值差异来决定显示的情况\r\n * 角度大于 90-(itemAngle/2)时,隐藏\r\n * 角度小于itemAngle/2表示最中心的项,显示并高亮\r\n * 其它值则表示此项为显示\r\n *\r\n * @param {Number} angle 新的滚动角度\r\n */\r\n Picker.prototype.calcItemVisable = function (angle) {\r\n this.items.each(function (index) {\r\n var difference = Math.abs(index * itemAngle - angle);\r\n\r\n if (difference < itemAngle / 2) {\r\n $(this).addClass(\"ipu-highlight ipu-visible\");\r\n } else if (difference >= (90 - itemAngle / 2)) { // 距离不能超过90度\r\n $(this).removeClass(\"ipu-highlight ipu-visible\");\r\n } else {\r\n $(this).addClass(\"ipu-visible\").removeClass(\"ipu-highlight\");\r\n }\r\n });\r\n };\r\n\r\n // 设置最后回归位置\r\n Picker.prototype.endScroll = function () {\r\n this.wrap.removeClass(\"ipu-noanimate\");\r\n var endAngle;\r\n\r\n if (this.angle < this.beginAngle) {\r\n endAngle = this.beginAngle;\r\n } else if (this.angle > this.endAngle) {\r\n endAngle = this.endAngle;\r\n } else {\r\n var index = parseInt((this.angle / itemAngle).toFixed(0));\r\n endAngle = (itemAngle * index);\r\n }\r\n\r\n this.setAngle(endAngle, true);\r\n };\r\n\r\n // 进行惯性滚动\r\n Picker.prototype.scrollDistAngle = function (startAngle, distAngle, duration) {\r\n var self = this;\r\n var nowTime = new Date().getTime();\r\n this.stopInertiaMove = false;\r\n duration = 1 * duration; // 滚动时长控制修改\r\n\r\n // hammer调用的惯性函数\r\n (function (nowTime, startAngle, distAngle, duration) {\r\n var frameInterval = 13;\r\n var stepCount = duration / frameInterval;\r\n var stepIndex = 0;\r\n\r\n (function inertiaMove() {\r\n if (self.stopInertiaMove) return;\r\n var newAngle = self.quartEaseOut(stepIndex, startAngle, distAngle, stepCount);\r\n self.setAngle(newAngle);\r\n stepIndex++;\r\n\r\n if (stepIndex > stepCount - 1 || newAngle < self.beginExceed || newAngle > self.endExceed) {\r\n self.endScroll();\r\n return;\r\n }\r\n\r\n setTimeout(inertiaMove, frameInterval);\r\n })();\r\n\r\n })(nowTime, startAngle, distAngle, duration);\r\n };\r\n\r\n /**\r\n * 设置是否监听触发onChange回调\r\n *\r\n * @param {Boolean} listen\r\n */\r\n Picker.prototype.setListen = function (listen) {\r\n this.listen = !!listen;\r\n };\r\n\r\n Picker.prototype.quartEaseOut = function (t, b, c, d) {\r\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\r\n };\r\n\r\n /**\r\n * 设置选中项,若子项的value属性为value,则设置该项为选中项\r\n *\r\n * @param value\r\n */\r\n Picker.prototype.setSelectedValue = function (value) {\r\n var self = this;\r\n for (var index in self.data) {\r\n var item = self.data[index];\r\n if (item.value == value) {\r\n self.setAngle(index * itemAngle, true);\r\n return;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * 获取选中的子项,若子项集为空时,返回空对象\r\n *\r\n * @returns {Object}\r\n */\r\n Picker.prototype.getSelectedItem = function () {\r\n return this.empty ? {} : this.data[this.index];\r\n };\r\n\r\n /**\r\n * 获取选中的子项的value属性\r\n * @returns\r\n */\r\n Picker.prototype.getSelectedValue = function () {\r\n return this.getSelectedItem().value;\r\n };\r\n\r\n /**\r\n * 返回选中项的text属性\r\n * @return {String}\r\n */\r\n Picker.prototype.getSelectedText = function () {\r\n return this.getSelectedItem().text;\r\n };\r\n\r\n /**\r\n * 获取选中项的索引,若子项集为空则返回null\r\n * @returns {Number}\r\n */\r\n Picker.prototype.getSelectedIndex = function () {\r\n return this.index;\r\n };\r\n\r\n ipu.Picker = Picker;\r\n\r\n})(ipu || window, jQuery, Hammer);\r\n\n// popPicker\r\n(function (ipu, $) {\r\n var Picker = ipu.Picker;\r\n\r\n /**\r\n * @class\r\n * 原生select的替代实现,适应数据较多或级联的情况\r\n *\r\n * @example\r\n // 配置项data的数据结构\r\n var data = [{text:'显示名称', value:''}...];\r\n\r\n // layer=1的数据结构\r\n var data-1 = [{text:'湖南', value:'HN'}, {text:'湖北', value:'HB'}];\r\n\r\n // layer=2时的数据结构,有额外data属性存放下一层级数据\r\n var data-1 = [{\r\n text:'湖南',value:'HN', data:[{text:'长沙', value:'CS'}, {text:'湘谭', value:'XT'}]\r\n },{\r\n text:'湖北',value:'HB', data:[{text:'武汉', value:'WH'}, {text:'天门', value:'TM'}]\r\n }\r\n ];\r\n\r\n *\r\n * @constructor 不能直接访问该类,调用{@link ipu#navBar ipu.popPicker(slt, option)}生成实例\r\n * @param {String|jqueryObj} slt\r\n * jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom\r\n * @param {Object} option 组件配置参数,默认配置见 {@link #cfg-defaultOption}\r\n */\r\n function PopPicker(option) {\r\n this.option = $.extend({}, this.defaultOption, option);\r\n if (!Picker) {\r\n Picker = ipu.Picker;\r\n }\r\n this._init();\r\n }\r\n\r\n PopPicker.prototype._init = function () {\r\n this.holder = $(this.option.template).appendTo(\"body\");\r\n var bodyHtml = $(\".ipu-poppicker-body\", this.holder);\r\n\r\n var layer = this.option.layer;\r\n var width = (100 / layer) + \"%\";\r\n this.pickers = new Array(layer);\r\n var self = this;\r\n var pickerHtml;\r\n this.mask = this.createMask();\r\n\r\n // 先初始化最底层picerk,再上面来\r\n for (var i = layer - 1; i >= 0; i--) {\r\n pickerHtml = $(this.option.pickerTemplate).prependTo(bodyHtml).css({width: width});\r\n\r\n this.pickers[i] = new Picker(pickerHtml, {\r\n onChange: (function (i) {\r\n return function (item) { // 更新底部的值\r\n if (i != layer - 1) {\r\n self.pickers[i + 1].setItems(item.data);\r\n }\r\n };\r\n })(i)\r\n });\r\n }\r\n\r\n $(\".ipu-poppicker-btn-ok\", this.holder).click(function () {\r\n var rs = self.getSelectItems();\r\n if (self.option.callBack(rs) !== false) {\r\n self.hide();\r\n }\r\n }).text(this.option.btns[1]);\r\n\r\n $(\".ipu-poppicker-btn-cancel\", this.holder).click(function () {\r\n self.hide();\r\n }).text(this.option.btns[0]);\r\n };\r\n\r\n /**\r\n * 组件默认配置项\r\n *\r\n * @cfg {Object} defaultOption\r\n * @cfg {String} defaultOption.template html结构\r\n * @cfg {String} defaultOption.pickerTemplate 内容dom选择器\r\n * @cfg {Object[]} defaultOption.data 选择项数据\r\n * @cfg {String} defaultOption.data.text 子项展示文本\r\n * @cfg {*} defaultOption.data.value 子项值\r\n * @cfg {Object[]} defaultOption.data.data 有更多层级时,此属性存放下一层级的数据\r\n * @cfg {Number} defaultOption.layer=1 数据层数\r\n * @cfg {String[]} defaultOption.btns=['取消', '确认'] 按钮文本\r\n * @cfg {Function} defaultOption.callBack=null 回调函数\r\n */\r\n PopPicker.prototype.defaultOption = {\r\n template: '<div class=\"ipu-poppicker\">'\r\n + '<div class=\"ipu-poppicker-header\">'\r\n + '<button class=\"ipu-btn ipu-btn-s ipu-poppicker-btn-cancel\">取消</button>'\r\n + '<button class=\"ipu-btn ipu-btn-s ipu-poppicker-btn-ok\">确定</button>'\r\n + '</div>'\r\n + '<div class=\"ipu-poppicker-body\">'\r\n + '</div>'\r\n + '</div>',\r\n pickerTemplate: '<div class=\"ipu-picker\">'\r\n + '<div class=\"ipu-picker-selectbox\"></div>'\r\n + '<ul></ul>'\r\n + '</div>',\r\n data: [], // 数据\r\n layer: 1, // 数据层级\r\n btns: ['取消', '确认'],\r\n callBack: function () { // 选择数据时的回调函数\r\n\r\n }\r\n };\r\n\r\n /**\r\n * 设置选择项数据\r\n *\r\n * @param{[Object]} data 选择项数组\r\n * @param {String} data.text 每个选择项的文本\r\n * @param {[Object]} data.data 如果有多层选择的话,应该有一个data属性\r\n */\r\n PopPicker.prototype.setData = function (data) {\r\n this.pickers[0].setItems(data);\r\n };\r\n\r\n /**\r\n * 显示选择器\r\n *\r\n * @param callBack\r\n */\r\n PopPicker.prototype.show = function (callBack) {\r\n if (callBack) {\r\n this.option.callBack = callBack;\r\n }\r\n this.mask.show();\r\n this.holder.addClass(\"ipu-current\");\r\n };\r\n\r\n /**\r\n * 隐藏选择器\r\n */\r\n PopPicker.prototype.hide = function () {\r\n this.mask.close();\r\n this.holder.removeClass(\"ipu-current\");\r\n };\r\n\r\n /**\r\n * 获取用户选择的项,如果配置项layer为1,则直接返回选择项,\r\n * 否则返回一个数组返回每层选中的项\r\n *\r\n */\r\n PopPicker.prototype.getSelectItems = function () {\r\n if (this.option.layer == 1) {\r\n return this.pickers[0].getSelectedItem();\r\n } else {\r\n var rs = [];\r\n for (var i = 0; i < this.option.layer; i++) {\r\n rs.push(this.pickers[i].getSelectedItem());\r\n }\r\n return rs;\r\n }\r\n };\r\n\r\n // 应该移除callback参数,提取出业成一个工具方法\r\n PopPicker.prototype.createMask = function (callback) {\r\n var self = this;\r\n var element = document.createElement('div');\r\n element.classList.add(\"ipu-picker-backup\");\r\n //element.addEventListener($.EVENT_MOVE, $.preventDefault);\r\n element.addEventListener('click', function () {\r\n self.hide();\r\n });\r\n var mask = [element];\r\n mask._show = false;\r\n mask.show = function () {\r\n mask._show = true;\r\n element.setAttribute('style', 'opacity:1');\r\n document.body.appendChild(element);\r\n return mask;\r\n };\r\n mask._remove = function () {\r\n if (mask._show) {\r\n mask._show = false;\r\n element.setAttribute('style', 'opacity:0');\r\n setTimeout(function () {\r\n var body = document.body;\r\n element.parentNode === body && body.removeChild(element);\r\n }, 350);\r\n }\r\n return mask;\r\n };\r\n mask.close = function () {\r\n if (mask._show) {\r\n if (callback) {\r\n if (callback() !== false) {\r\n mask._remove();\r\n }\r\n } else {\r\n mask._remove();\r\n }\r\n }\r\n };\r\n return mask;\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 生成PopPicker实例,参数信息见{@link PopPicker#method-constructor}\r\n *\r\n * @param {String} slt\r\n * @param {Object} option\r\n * @returns {PopPicker}\r\n */\r\n ipu.popPicker = function (option) {\r\n return new PopPicker(option);\r\n };\r\n\r\n})(ipu || window, jQuery);\r\n\n(function (ipu, $) {\r\n\r\n /**\r\n * @class\r\n * 进度条\r\n *\r\n * @example\r\n * <!-- 组件html -->\r\n * <div class=\"ipu-ipu-progress \">\r\n * <span class=\"ipu-progressbar\"></span>\r\n * </div>\r\n *\r\n *\r\n * @constructor 不能直接访问该类,调用 {@link ipu#progressBar}生成实例\r\n * @param {String|jqueryObj} slt\r\n * jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom\r\n * @param {Object} option 组件配置参数,默认配置见 {@link #cfg-defaultOption}\r\n */\r\n function ProgressBar(id, option) {\r\n this.id = id;\r\n this.level = option.level;\r\n this.progress = option.progress;\r\n this.progressBar = $(id).eq(0);\r\n\r\n if (option.progress != null) {\r\n this.setProgress(this.progress);\r\n }\r\n if (option.level != null) {\r\n this.setLevel(this.level);\r\n }\r\n }\r\n\r\n /**\r\n * @cfg defaultOption 刷新组件默认配置\r\n * @cfg {default|warning|highlight|success} defaultOption.level='default' 级别,显示颜色\r\n * @cfg {Number} defaultOption.progress=null 当前进度百分比\r\n *\r\n */\r\n\r\n /**\r\n * 设置百分进度\r\n *\r\n * @param {Number} pro\r\n */\r\n ProgressBar.prototype.setProgress = function (pro) {\r\n if (pro < 0 || pro > 100) return;\r\n\r\n $(this.progressBar.find(\".ipu-progressbar\")).css(\"transform\", \"translate3d(\" + (-(100 - pro)) + \"%, 0px, 0px)\");\r\n this.progress = pro;\r\n };\r\n\r\n /**\r\n * 获取百分进度\r\n *\r\n * @returns {Number|*}\r\n */\r\n ProgressBar.prototype.getProgress = function () {\r\n return this.progress;\r\n };\r\n\r\n /**\r\n * 设置进度条级别\r\n *\r\n * @param {default | success | highlight | warning} level\r\n */\r\n ProgressBar.prototype.setLevel = function (level) {\r\n if (level == \"default\") {\r\n $(this.progressBar).removeClass(\"ipu-progressbar-success ipu-progressbar-hightlight ipu-progressbar-warning\");\r\n $(this.progressBar).addClass(\"ipu-progress\");\r\n } else if (level == \"success\") {\r\n $(this.progressBar).removeClass(\"ipu-progressbar-highlight ipu-progressbar-warning\");\r\n $(this.progressBar).addClass(\"ipu-progressbar-success\");\r\n } else if (level == \"highlight\") {\r\n $(this.progressBar).removeClass(\"ipu-progressbar-success ipu-progressbar-warning\");\r\n $(this.progressBar).addClass(\"ipu-progressbar-highlight\");\r\n } else if (level == \"warning\") {\r\n $(this.progressBar).removeClass(\"ipu-progressbar-success ipu-progressbar-highlight\");\r\n $(this.progressBar).addClass(\"ipu-progressbar-warning\");\r\n }\r\n };\r\n\r\n /**\r\n * @member ipu\r\n * 生成PopPicker实例,参数信息见{@link ProgressBar#method-constructor}\r\n *\r\n * @param {String} slt\r\n * @param {Object} option\r\n * @returns {ProgressBar}\r\n */\r\n ipu.progressBar = function (slt, option) {\r\n return new ProgressBar(slt, option);\r\n };\r\n})(ipu || window, jQuery);\r\n\n// 设置上下条件长度,或计算函数\n// 处理resize的问题,用户主动调用refresh??\n// 底部启用或停用时,应该刷新组件iscroll高度\n// 顶部正在加载时,自动停止底端加载状态,停用底部加载,停用底部加载时,可以不隐藏,变性成显示不见,或者隐藏,然后修改iscroll参数\n\n(function (ipu, $, iScroll) {\n /**\n * @class\n * 通过IScroll.js实现上拉下拉加载\n *\n * @example\n * <!-- 组件html结构,最外层div应有一个固定的高度,会在此元素上初始化iScroll -->\n * <div>\n * <div class=\"ipu-refresh-wrapper\">\n * <!-- 此处组件初始化后,会添加上拉html -->\n * <div class=\"refresh-content\">\n * 内容区...\n * </div>\n * <!-- 此处组件初始化后,会添加下拉html -->\n * </div>\n * </div>\n *\n * @uses IScroll.js\n *\n * @constructor 不能直接访问该类,调用ipu.refresh(slt, option)生成实例\n * @param {String|JqueryObj|Dom} slt\n * jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom\n * @param {Object} option\n * 组件参数\n */\n function Refresh(slt, option) {\n this.option = $.extend({}, this.defaultOption, option);\n this.el = $(slt).get(0);\n this._initBottomAndTop();\n var me = this;\n\n this.iScrollOption = {\n vScrollbar: false, // 不显示滚动条\n onScrollMove: function (e) {\n if (me.topEnable && !me.topLoading) { // 顶部是松手才加载\n if (this.y >= me.topPullOffset && !me.topEl.hasClass('ipu-refresh-toload')) { // 达到刷新距离,更新显示状态\n me.topEl.addClass('ipu-refresh-toload');\n } else if (this.y < me.topPullOffset && me.topEl.hasClass('ipu-refresh-toload')) { // 从达到刷新距离更新为未达到距离,更新显示状态\n me.topEl.removeClass('ipu-refresh-toload');\n }\n }\n\n me._checkBottomLoading(); // 底部加载条件和顶部条件不一样,只要滚动离底部一定高度就开始加载\n me.goTop = this.y > me.topPullOffset; // 记录是否位于顶部位置,以便刷新后可以回到此位置\n },\n onBeforeScrollEnd: function () { // 一定是用户拖动触发,在滚动结束前应该触发\n me._checkTopLoading();\n me._checkBottomLoading();\n },\n onScrollEnd: function () { // 这个事件可能由非用户拖动时触发,可能是拖动惯性导致,所有顶部不应该处理,但顶部不管是否惯性,位置条件满足即触发\n if (me.topLoading && this.y < this.minScrollY && me.goTop) {\n me.iScroll.scrollTo(0, this.minScrollY, 0);\n }\n me._checkBottomLoading(); // 在beforend执行还不够,还在要end执行\n },\n onRefresh: function () { // 刷新时,若顶部加载还在进行,且当前显示的顶部加载,则继续显示,否则刷新后会消失顶部加载,这里代码没有考虑重用了,应该可以做一步提取\n if (me.topLoading) { // 如果顶部在加载,则刷新的时候,设置最小顶部距离,显示顶部加载状态\n this.minScrollY = this.minScrollY + me.topPullOffset;\n }\n }\n };\n\n this.iScrollOption = $.extend({}, this.option.iScrollOption, this.iScrollOption);\n this.iScroll = new iScroll(this.el, this.iScrollOption);\n this._checkContentLoading();\n }\n\n /**\n * @cfg defaultOption 刷新组件默认配置\n * @cfg {Function} defaultOption.bottomLoadFun=null 上拉时,触发底加载的响应函数\n * @cfg {Function} defaultOption.topLoadFun=null 下拉时,触发顶部加载的响应函数\n * @cfg {Boolean} defaultOption.initEnableTop=true 初始化时,是否启用顶部加载功能\n * @cfg {Boolean} defaultOption.initEnableBottom=true 初始化时,是否启用底部加载功能\n * @cfg {String} defaultOption.bottomLoadHtml=... 底部加载时显示的html片段,不建议变动\n * @cfg {String} defaultOption.topLoadHtml=... 顶部加载时显示的html片段,不建议变动\n * @cfg {Number} defaultOption.bottomAddLen=0 距离底部多远时,触发底部加载\n *\n */\n Refresh.prototype.defaultOption = {\n bottomLoadFun: null, // 底部加载处理函数\n topLoadFun: null, // 顶部加载处理函数\n initEnableTop: true, // 初始时启用刷新,有时用户并不想启用\n initEnableBottom: true, // 初始时启用加载更多,用时用户并不想启用\n bottomLoadHtml: '<div class=\"ipu-refresh-bottom\"><span class=\"ipu-refresh-loading\"></span></div>', // 默认底部加载显示内容\n topLoadHtml: '<div class=\"ipu-refresh-top\"><span class=\"ipu-refresh-loading\"></span><div class=\"ipu-refresh-arrow\"></div></div>',\n // 默认顶部加载显示内容,最上层节点class有下面三个阶段变化\n // 默认阶段,不是顶部加载状态时,且拖动时未达到加载距离,无特殊class,移除ipu-refresh-top-loading\n // 拖动达到加载距离,则增加class:ipu-refresh-toload\n // 加载中,则增加class:ipu-refresh-top-loading,移除class:ipu-refresh-toload\n bottomAddLen: 0, // 底部提前加载距离,单位px\n iScrollOption: {} // 主要是用来接收外面一些函数,不能传递回调的相关函数如refresh,也可在本地函数调用完后,再调用参数的函数,不推荐\n };\n\n Refresh.prototype._initBottomAndTop = function () {\n this.scrollEl = $(\">.ipu-refresh-wrapper\", this.el);\n this.bottomEl = $(this.option.bottomLoadHtml).appendTo(this.scrollEl);\n this.topEl = $(this.option.topLoadHtml).prependTo(this.scrollEl);\n\n this.topPullOffset = this.topEl.outerHeight();\n this.bottomPullOffset = this.bottomEl.outerHeight() + this.option.bottomAddLen; // 增加100;最好配一个额外参数\n\n /** @property {Boolean} 顶部是否加载中 */\n this.topLoading = false; // 顶部正在载加载\n\n /** @property {Boolean} 底部是否加载中 */\n this.bottomLoading = false; // 底部正在加载\n\n /** @property {Boolean} 底部是否可加载 */\n this.bottomEnable = this.option.initEnableBottom && !!this.option.bottomLoadFun;\n\n /** @property {Boolean} 顶部是否可加载 */\n this.topEnable = this.option.initEnableTop && !!this.option.topLoadFun;\n\n this.goTop = false; // 用来处理,因为iScroll使用momentum(惯性), 导致有时顶部显示不正确问题,true表示顶部显示加载条\n\n this.enableBottom(this.bottomEnable);\n this.enableTop(this.topEnable);\n };\n\n // 检查是否需要底部加载\n Refresh.prototype._checkBottomLoading = function () {\n if (this.bottomEnable) {\n if (this.iScroll.y < this.iScroll.maxScrollY + this.bottomPullOffset) {\n this._startBottomLoading();\n }\n }\n };\n\n Refresh.prototype._checkTopLoading = function () {\n if (this.topEnable) {\n if (this.topEl.hasClass('ipu-refresh-toload')) {\n this._startTopLoading();\n }\n }\n };\n\n // 检查内容是否超出容器高度,未超出时,自动调用底部加载\n Refresh.prototype._checkContentLoading = function () {\n if (this.bottomEnable) {\n if (this.iScroll.maxScrollY >= -this.bottomPullOffset) { // 此处要计算底端的高度\n this._startBottomLoading();\n }\n }\n };\n\n // 开始底部加载\n Refresh.prototype._startBottomLoading = function () {\n if (!this.bottomLoading) {\n this.bottomLoading = true;\n this.option.bottomLoadFun(); // 刷新当前索引加载更多的数据\n }\n };\n\n // 开始顶部加载\n Refresh.prototype._startTopLoading = function () {\n if (!this.topLoading) {\n this.topLoading = true;\n this.topEl.removeClass('ipu-refresh-toload').addClass('ipu-refresh-top-loading');\n this.iScroll.minScrollY = this.iScroll.minScrollY + this.topPullOffset;\n this.option.topLoadFun(); // 刷新当前索引加载更多的数据\n }\n };\n\n /**\n * 结束底部加载,defaultOption.bottomLoadFun中处理完加载后,最后调用此方法\n */\n Refresh.prototype.endBottomLoading = function () {\n this.bottomLoading = false;\n this.refresh();\n };\n\n /**\n * 结束顶部加载,defaultOption.topLoadFun中处理完加载后,最后调用此方法\n */\n Refresh.prototype.endTopLoading = function () {\n this.topEl.removeClass('ipu-refresh-top-loading');\n this.topLoading = false;\n // this.iScroll.scrollTo(0, 0); // 刷新加载则应该回到顶部,待测试确认\n this.refresh();\n };\n\n /**\n * 是否启动顶部加载功能\n *\n * @param {Boolean} enable\n */\n Refresh.prototype.enableTop = function (enable) {\n this.topEnable = enable;\n if (enable) {\n this.topEl.show();\n } else {\n this.topEl.hide();\n }\n };\n\n /**\n * 是否启用底部加载功能\n *\n * @param {Boolean} enable\n */\n Refresh.prototype.enableBottom = function (enable) {\n this.bottomEnable = enable;\n if (enable) {\n this.bottomEl.show();\n } else {\n this.bottomEl.hide();\n }\n };\n\n /**\n * 在内容发生变化时,但是又不是因为顶部加载或底部加载导致的,此时调用此方法刷新IScroll\n */\n Refresh.prototype.refresh = function () {\n this.iScroll.refresh();\n this._checkContentLoading();\n };\n\n\n /**\n * @member ipu\n * 生成PopPicker实例,参数信息见{@link Refresh#method-constructor}\n *\n * @param {String} slt\n * @param {Object} option\n * @returns {Refresh}\n */\n ipu.refresh = function (slt, optoins) {\n return new Refresh(slt, optoins);\n };\n\n})(ipu || window, jQuery, iScroll);\n\n// Tab\r\n(function (ipu, $) {\r\n\r\n /**\r\n * @class\r\n * tab切换组件功能实现\r\n *\r\n * @example\r\n * <!-- html结构 -->\r\n * <div class=\"ipu-tab\"> <!-- 如果class中添加 ipu-tab-fixed,则可固定头部,此时需要父元素的高度是确定的 -->\r\n * <ul class=\"ipu-tab-title ipu-tab-title-link\"> <!-- 页头有 ipu-tab-title-link 和 ipu-tab-title-button两种样式 -->\r\n * <li>热门推荐</li>\r\n * <li class=\"ipu-current\">全部表情</li> <!-- class为ipu-current为默认选中项 -->\r\n * <li>表情</li>\r\n * <li>表情</li>\r\n * </ul>\r\n * <div class=\"ipu-tab-body\">\r\n * <ul class=\"ipu-tab-body-wrapper\">\r\n * <li>自定义内容</li>\r\n * <li class=\"\">选项2内容</li>\r\n * <li class=\"\">选项3内容</li>\r\n * <li class=\"\">选项4内容</li>\r\n * </ul>\r\n * </div>\r\n * </div>\r\n *\r\n *\r\n * @constructor 不能直接访问该类,调用ipu.tab(slt, option)生成实例\r\n * @param {string|jqueryObj} slt\r\n * jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom\r\n * @param {object} option\r\n * 组件参数\r\n */\r\n function Tab(slt, option) {\r\n this.el = $(slt).get(0);\r\n this.titleItems = $(\".ipu-tab-title:first>li\", this.el);\r\n this.bodyWrapper = $(\".ipu-tab-body-wrapper:first\", this.el);\r\n this.contentItems = $(\">li\", this.bodyWrapper);\r\n\r\n this.option = $.extend({}, this.defaultOption, option);\r\n this.itemSize = this.contentItems.size();\r\n this.fixed = $(this.el).is(\".ipu-tab-fixed\"); // 是否为固定高度的\r\n\r\n var that = this;\r\n this.titleItems.each(function (index) {\r\n $(this).click(function () {\r\n that.show(index);\r\n });\r\n });\r\n\r\n var index = this.titleItems.filter(\".ipu-current\").index();\r\n if (index == -1) {\r\n index = 0;\r\n }\r\n\r\n this.show(index);\r\n }\r\n\r\n /**\r\n * 默认配置项\r\n * @cfg defaultOption = { callBack: function (index) {}};\r\n * @cfg defaultOption.callBack 切换tab项时的回调函数,参数为显示的项索引\r\n */\r\n Tab.prototype.defaultOption = {\r\n callBack: function (index) {\r\n }\r\n };\r\n\r\n /**\r\n * 显示第几项内容\r\n * @param {number} index 要显示的项索引\r\n */\r\n Tab.prototype.show = function (index) {\r\n if (this.fixed) {\r\n var move = -index * 100 + \"%\";\r\n this.bodyWrapper.css(\"transform\", \"translate3d(\" + move + \", 0, 0)\");\r\n }\r\n this.contentItems.eq(index).addClass(\"ipu-current\").siblings().removeClass(\"ipu-current\");\r\n this.titleItems.eq(index).addClass(\"ipu-current\").siblings().removeClass(\"ipu-current\");\r\n this._end(index);\r\n };\r\n\r\n Tab.prototype._end = function (index) {\r\n this.lastIndex = this.currentIndex;\r\n this.currentIndex = index;\r\n\r\n if (this.option.callBack) {\r\n this.option.callBack(index, this.lastIndex);\r\n }\r\n };\r\n\r\n ipu.tab = function (slt, option) {\r\n return new Tab(slt, option);\r\n };\r\n})(ipu || window, jQuery);\r\n\r\n\n\r\n // 初始化代码\r\n jQuery(function () {\r\n // 添加一个touchstart空函数,让:active样式可以在ios上生效\r\n // 新版默认不需要事件好像也可生效\r\n jQuery(\"body\").on(\"touchstart\",function (e) {});\r\n\r\n // 处理ios点击延迟问题\r\n FastClick.attach(document.body);\r\n });\r\n\r\n return ipu;\r\n }\r\n\r\n // todo:可以添加一个和其它库的适配处理,\r\n // 这里假设第三方库,jquery,iScroll,Hammer的史称已经固定\r\n if ( typeof define === \"function\" && define.amd ) {\r\n define(['jquery', 'iScroll', 'Hammer', 'FastClick'], function (jQuery, iScroll, Hammer, FastClick) {\r\n return window.ipu = setup(jQuery, iScroll, Hammer, FastClick);\r\n });\r\n } else {\r\n window.ipu = setup(window.jQuery, window.iScroll, window.Hammer, window.FastClick);\r\n }\r\n})();\r\n\r\n//# sourceMappingURL=ipu.js.map\r\n"]}
|
@ -13,7 +13,7 @@
|
13
|
13
|
<link rel="stylesheet" href="styles-8184dad50dadb76aad743829a7c19ed0.css" type="text/css" />
|
14
|
14
|
|
15
|
15
|
<script type="text/javascript" src="extjs/ext-all.js"></script>
|
16
|
|
<script type="text/javascript" src="data-f163b615f168d9fe7598ca40cdc8e637.js"></script>
|
|
16
|
<script type="text/javascript" src="data-28ff3d3d38ad2e6decda9913548abf77.js"></script>
|
17
|
17
|
|
18
|
18
|
<script type="text/javascript" src="app-0c945a27f43452df695771ddb60b3d14.js"></script>
|
19
|
19
|
|
|
@ -61,7 +61,7 @@
|
61
|
61
|
</ul>
|
62
|
62
|
</div>
|
63
|
63
|
|
64
|
|
<div id='footer-content' style='display: none'>Generated on Thu 02 Aug 2018 11:22:30 by <a href='https://github.com/senchalabs/jsduck'>JSDuck</a> 5.3.4.</div>
|
|
64
|
<div id='footer-content' style='display: none'>Generated on Thu 02 Aug 2018 17:22:12 by <a href='https://github.com/senchalabs/jsduck'>JSDuck</a> 5.3.4.</div>
|
65
|
65
|
|
66
|
66
|
|
67
|
67
|
|
|
@ -1 +1 @@
|
1
|
|
Ext.data.JsonP.Carousel({"tagname":"class","name":"Carousel","autodetected":{},"files":[{"filename":"ipu.js","href":"ipu.html#Carousel"}],"deprecated":{"text":"<p>推荐使用 <a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a>\n简单封装IScroll.js的snap功能,实现banner功能</p>\n\n<pre class='inline-example '><code><!-- 组件html结构如下,li里内容可自定义 -->\n <div class=\"ipu-carousel ipu-hammer-carousel\">\n <ul class=\"ipu-carousel-wrapper\">\n <li ><img src=\"../../biz/img/01.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/02.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/03.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/04.jpg\" alt=\"\"></li>\n </ul>\n</div>\n</code></pre>\n"},"uses":["IScroll.js"],"members":[{"name":"defaultOption","tagname":"cfg","owner":"Carousel","id":"cfg-defaultOption","meta":{}},{"name":"constructor","tagname":"method","owner":"Carousel","id":"method-constructor","meta":{}},{"name":"next","tagname":"method","owner":"Carousel","id":"method-next","meta":{}},{"name":"play","tagname":"method","owner":"Carousel","id":"method-play","meta":{}},{"name":"prev","tagname":"method","owner":"Carousel","id":"method-prev","meta":{}},{"name":"refresh","tagname":"method","owner":"Carousel","id":"method-refresh","meta":{}},{"name":"show","tagname":"method","owner":"Carousel","id":"method-show","meta":{}},{"name":"stop","tagname":"method","owner":"Carousel","id":"method-stop","meta":{}}],"alternateClassNames":[],"aliases":{},"id":"class-Carousel","short_doc":" ...","component":false,"superclasses":[],"subclasses":[],"mixedInto":[],"mixins":[],"parentMixins":[],"requires":[],"html":"<div><pre class=\"hierarchy\"><h4>Uses</h4><div class='dependency'>IScroll.js</div><h4>Files</h4><div class='dependency'><a href='source/ipu.html#Carousel' target='_blank'>ipu.js</a></div></pre><div class='doc-contents'>\n <div class='rounded-box deprecated-box deprecated-tag-box'>\n <p>This class has been <strong>deprected</strong> </p>\n <p>推荐使用 <a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a>\n简单封装IScroll.js的snap功能,实现banner功能</p>\n\n<pre class='inline-example '><code><!-- 组件html结构如下,li里内容可自定义 -->\n <div class=\"ipu-carousel ipu-hammer-carousel\">\n <ul class=\"ipu-carousel-wrapper\">\n <li ><img src=\"../../biz/img/01.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/02.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/03.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/04.jpg\" alt=\"\"></li>\n </ul>\n</div>\n</code></pre>\n\n </div>\n</div><div class='members'><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-cfg'>Config options</h3><div class='subsection'><div id='cfg-defaultOption' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-cfg-defaultOption' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-cfg-defaultOption' class='name expandable'>defaultOption</a> : Object<span class=\"signature\"></span></div><div class='description'><div class='short'>组件默认配置项 ...</div><div class='long'><p>组件默认配置项</p>\n<p>Defaults to: <code>{index: null, autoPlay: false, duration: 3000, indicator: false, callBack: null}</code></p><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>默认显示的项</p>\n</div></li><li><span class='pre'>autoPlay</span> : Boolean<div class='sub-desc'><p>是否自动播放</p>\n</div></li><li><span class='pre'>duration</span> : Number<div class='sub-desc'><p>自动播放间隔,单位ms</p>\n</div></li><li><span class='pre'>indicator</span> : Boolean<div class='sub-desc'><p>是否生成指示器</p>\n</div></li><li><span class='pre'>callBack</span> : Function<div class='sub-desc'><p>切换显示时的回调函数</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>当前显示项索引</p>\n</div></li></ul></div></li></ul></div></div></div></div></div><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-method'>Methods</h3><div class='subsection'><div id='method-constructor' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-constructor' target='_blank' class='view-source'>view source</a></div><strong class='new-keyword'>new</strong><a href='#!/api/Carousel-method-constructor' class='name expandable'>Carousel</a>( <span class='pre'>slt, option</span> ) : <a href=\"#!/api/Carousel\" rel=\"Carousel\" class=\"docClass\">Carousel</a><span class=\"signature\"></span></div><div class='description'><div class='short'>不能直接访问该类,使用ipu.carousel(slt, option)生成实例 ipu.carousel ...</div><div class='long'><p>不能直接访问该类,使用<a href=\"#!/api/ipu-method-carousel\" rel=\"ipu-method-carousel\" class=\"docClass\">ipu.carousel</a>(slt, option)生成实例 <a href=\"#!/api/ipu-method-carousel\" rel=\"ipu-method-carousel\" class=\"docClass\">ipu.carousel</a></p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>slt</span> : Dom|JqueryObj|String<div class='sub-desc'><p>jquery对象或者jquery选择器或Dom元素</p>\n</div></li><li><span class='pre'>option</span> : Object<div class='sub-desc'><p>组件配置参数,默认配置见 <a href=\"#!/api/Carousel-cfg-defaultOption\" rel=\"Carousel-cfg-defaultOption\" class=\"docClass\">defaultOption</a></p>\n</div></li></ul><h3 class='pa'>Returns</h3><ul><li><span class='pre'><a href=\"#!/api/Carousel\" rel=\"Carousel\" class=\"docClass\">Carousel</a></span><div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-next' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-next' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-next' class='name expandable'>next</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>显示下一项 ...</div><div class='long'><p>显示下一项</p>\n</div></div></div><div id='method-play' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-play' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-play' class='name expandable'>play</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>开始自动播放 ...</div><div class='long'><p>开始自动播放</p>\n</div></div></div><div id='method-prev' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-prev' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-prev' class='name expandable'>prev</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>显示上一项 ...</div><div class='long'><p>显示上一项</p>\n</div></div></div><div id='method-refresh' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-refresh' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-refresh' class='name expandable'>refresh</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>若窗口发生大小变更,调用此方法更新位移 ...</div><div class='long'><p>若窗口发生大小变更,调用此方法更新位移</p>\n</div></div></div><div id='method-show' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-show' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-show' class='name expandable'>show</a>( <span class='pre'>index</span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>显示索引index对应的索 ...</div><div class='long'><p>显示索引index对应的索</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>显示项索引</p>\n</div></li></ul></div></div></div><div id='method-stop' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-stop' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-stop' class='name expandable'>stop</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>停止自动播放 ...</div><div class='long'><p>停止自动播放</p>\n</div></div></div></div></div></div></div>","meta":{"deprecated":{"text":"<p>推荐使用 <a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a>\n简单封装IScroll.js的snap功能,实现banner功能</p>\n\n<pre class='inline-example '><code><!-- 组件html结构如下,li里内容可自定义 -->\n <div class=\"ipu-carousel ipu-hammer-carousel\">\n <ul class=\"ipu-carousel-wrapper\">\n <li ><img src=\"../../biz/img/01.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/02.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/03.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/04.jpg\" alt=\"\"></li>\n </ul>\n</div>\n</code></pre>\n"}}});
|
|
1
|
Ext.data.JsonP.Carousel({"tagname":"class","name":"Carousel","autodetected":{},"files":[{"filename":"ipu.js","href":"ipu.html#Carousel"}],"deprecated":{"text":"<p>推荐使用 <a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a>\n简单封装IScroll.js的snap功能,实现banner功能</p>\n\n<pre class='inline-example '><code><!-- 组件html结构如下,li里内容可自定义 -->\n <div class=\"ipu-carousel ipu-hammer-carousel\">\n <ul class=\"ipu-carousel-wrapper\">\n <li ><img src=\"../../biz/img/01.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/02.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/03.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/04.jpg\" alt=\"\"></li>\n </ul>\n</div>\n</code></pre>\n"},"uses":["IScroll.js"],"members":[{"name":"defaultOption","tagname":"cfg","owner":"Carousel","id":"cfg-defaultOption","meta":{}},{"name":"constructor","tagname":"method","owner":"Carousel","id":"method-constructor","meta":{}},{"name":"next","tagname":"method","owner":"Carousel","id":"method-next","meta":{}},{"name":"play","tagname":"method","owner":"Carousel","id":"method-play","meta":{}},{"name":"prev","tagname":"method","owner":"Carousel","id":"method-prev","meta":{}},{"name":"refresh","tagname":"method","owner":"Carousel","id":"method-refresh","meta":{}},{"name":"show","tagname":"method","owner":"Carousel","id":"method-show","meta":{}},{"name":"stop","tagname":"method","owner":"Carousel","id":"method-stop","meta":{}}],"alternateClassNames":[],"aliases":{},"id":"class-Carousel","short_doc":" ...","component":false,"superclasses":[],"subclasses":[],"mixedInto":[],"mixins":[],"parentMixins":[],"requires":[],"html":"<div><pre class=\"hierarchy\"><h4>Uses</h4><div class='dependency'>IScroll.js</div><h4>Files</h4><div class='dependency'><a href='source/ipu.html#Carousel' target='_blank'>ipu.js</a></div></pre><div class='doc-contents'>\n <div class='rounded-box deprecated-box deprecated-tag-box'>\n <p>This class has been <strong>deprected</strong> </p>\n <p>推荐使用 <a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a>\n简单封装IScroll.js的snap功能,实现banner功能</p>\n\n<pre class='inline-example '><code><!-- 组件html结构如下,li里内容可自定义 -->\n <div class=\"ipu-carousel ipu-hammer-carousel\">\n <ul class=\"ipu-carousel-wrapper\">\n <li ><img src=\"../../biz/img/01.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/02.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/03.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/04.jpg\" alt=\"\"></li>\n </ul>\n</div>\n</code></pre>\n\n </div>\n</div><div class='members'><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-cfg'>Config options</h3><div class='subsection'><div id='cfg-defaultOption' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-cfg-defaultOption' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-cfg-defaultOption' class='name expandable'>defaultOption</a> : Object<span class=\"signature\"></span></div><div class='description'><div class='short'>组件默认配置项 ...</div><div class='long'><p>组件默认配置项</p>\n<p>Defaults to: <code>{index: null, autoPlay: false, duration: 3000, indicator: false, callBack: null}</code></p><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>默认显示的项</p>\n</div></li><li><span class='pre'>autoPlay</span> : Boolean<div class='sub-desc'><p>是否自动播放</p>\n</div></li><li><span class='pre'>duration</span> : Number<div class='sub-desc'><p>自动播放间隔,单位ms</p>\n</div></li><li><span class='pre'>indicator</span> : Boolean<div class='sub-desc'><p>是否生成指示器</p>\n</div></li><li><span class='pre'>callBack</span> : Function<div class='sub-desc'><p>切换显示时的回调函数</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>当前显示项索引</p>\n</div></li></ul></div></li></ul></div></div></div></div></div><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-method'>Methods</h3><div class='subsection'><div id='method-constructor' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-constructor' target='_blank' class='view-source'>view source</a></div><strong class='new-keyword'>new</strong><a href='#!/api/Carousel-method-constructor' class='name expandable'>Carousel</a>( <span class='pre'>slt, option</span> ) : <a href=\"#!/api/Carousel\" rel=\"Carousel\" class=\"docClass\">Carousel</a><span class=\"signature\"></span></div><div class='description'><div class='short'>不能直接访问该类,使用ipu.carousel(slt, option)生成实例 ipu.carousel ...</div><div class='long'><p>不能直接访问该类,使用<a href=\"#!/api/ipu-method-carousel\" rel=\"ipu-method-carousel\" class=\"docClass\">ipu.carousel</a>(slt, option)生成实例 <a href=\"#!/api/ipu-method-carousel\" rel=\"ipu-method-carousel\" class=\"docClass\">ipu.carousel</a></p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>slt</span> : Dom|JqueryObj|String<div class='sub-desc'><p>jquery对象或者jquery选择器或Dom元素</p>\n</div></li><li><span class='pre'>option</span> : Object<div class='sub-desc'><p>组件配置参数,默认配置见 <a href=\"#!/api/Carousel-cfg-defaultOption\" rel=\"Carousel-cfg-defaultOption\" class=\"docClass\">defaultOption</a></p>\n</div></li></ul><h3 class='pa'>Returns</h3><ul><li><span class='pre'><a href=\"#!/api/Carousel\" rel=\"Carousel\" class=\"docClass\">Carousel</a></span><div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-next' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-next' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-next' class='name expandable'>next</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>显示下一项 ...</div><div class='long'><p>显示下一项</p>\n</div></div></div><div id='method-play' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-play' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-play' class='name expandable'>play</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>开始自动播放 ...</div><div class='long'><p>开始自动播放</p>\n</div></div></div><div id='method-prev' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-prev' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-prev' class='name expandable'>prev</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>显示上一项 ...</div><div class='long'><p>显示上一项</p>\n</div></div></div><div id='method-refresh' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-refresh' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-refresh' class='name expandable'>refresh</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>若窗口发生大小变更,调用此方法更新位移 ...</div><div class='long'><p>若窗口发生大小变更,调用此方法更新位移</p>\n</div></div></div><div id='method-show' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-show' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-show' class='name expandable'>show</a>( <span class='pre'>index</span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>显示索引index对应的索 ...</div><div class='long'><p>显示索引index对应的索</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>显示项索引</p>\n</div></li></ul></div></div></div><div id='method-stop' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Carousel'>Carousel</span><br/><a href='source/ipu.html#Carousel-method-stop' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Carousel-method-stop' class='name expandable'>stop</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>停止自动播放 ...</div><div class='long'><p>停止自动播放</p>\n</div></div></div></div></div></div></div>","meta":{"deprecated":{"text":"<p>推荐使用 <a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a>\n简单封装IScroll.js的snap功能,实现banner功能</p>\n\n<pre class='inline-example '><code><!-- 组件html结构如下,li里内容可自定义 -->\n <div class=\"ipu-carousel ipu-hammer-carousel\">\n <ul class=\"ipu-carousel-wrapper\">\n <li ><img src=\"../../biz/img/01.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/02.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/03.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/04.jpg\" alt=\"\"></li>\n </ul>\n</div>\n</code></pre>\n"}}});
|
|
@ -1 +1 @@
|
1
|
|
Ext.data.JsonP.HammerCarousel({"tagname":"class","name":"HammerCarousel","autodetected":{},"files":[{"filename":"ipu.js","href":"ipu.html#HammerCarousel"}],"uses":["Hammer.js"],"members":[{"name":"defaultOption","tagname":"cfg","owner":"HammerCarousel","id":"cfg-defaultOption","meta":{}},{"name":"constructor","tagname":"method","owner":"HammerCarousel","id":"method-constructor","meta":{}},{"name":"next","tagname":"method","owner":"HammerCarousel","id":"method-next","meta":{}},{"name":"play","tagname":"method","owner":"HammerCarousel","id":"method-play","meta":{}},{"name":"prev","tagname":"method","owner":"HammerCarousel","id":"method-prev","meta":{}},{"name":"refresh","tagname":"method","owner":"HammerCarousel","id":"method-refresh","meta":{}},{"name":"show","tagname":"method","owner":"HammerCarousel","id":"method-show","meta":{}},{"name":"stop","tagname":"method","owner":"HammerCarousel","id":"method-stop","meta":{}}],"alternateClassNames":[],"aliases":{},"id":"class-HammerCarousel","short_doc":"通过hammer.js实现的banner功能组件,\n因为实现轮播,显示第一项后,再显示第一项,所以第一项有被复制到添加到最后\n\n<!-- 组件html结构如下,li里的内容用户可自定义 -->\n <div clas...","component":false,"superclasses":[],"subclasses":[],"mixedInto":[],"mixins":[],"parentMixins":[],"requires":[],"html":"<div><pre class=\"hierarchy\"><h4>Uses</h4><div class='dependency'>Hammer.js</div><h4>Files</h4><div class='dependency'><a href='source/ipu.html#HammerCarousel' target='_blank'>ipu.js</a></div></pre><div class='doc-contents'><p>通过hammer.js实现的banner功能组件,\n因为实现轮播,显示第一项后,再显示第一项,所以第一项有被复制到添加到最后</p>\n\n<pre class='inline-example '><code><!-- 组件html结构如下,li里的内容用户可自定义 -->\n <div class=\"ipu-carousel ipu-hammer-carousel\">\n <ul class=\"ipu-carousel-wrapper\">\n <li ><img src=\"../../biz/img/01.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/02.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/03.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/04.jpg\" alt=\"\"></li>\n </ul>\n </div>\n</code></pre>\n</div><div class='members'><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-cfg'>Config options</h3><div class='subsection'><div id='cfg-defaultOption' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-cfg-defaultOption' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-cfg-defaultOption' class='name expandable'>defaultOption</a> : Object<span class=\"signature\"></span></div><div class='description'><div class='short'>组件默认配置项 ...</div><div class='long'><p>组件默认配置项</p>\n<p>Defaults to: <code>{index: null, loop: false, autoPlay: false, duration: 3000, indicator: false, callBack: null, clickBack: null}</code></p><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>初始化时显示第几项,用户未指定时,会查找子项内容上有ipu-current的项显示,默认显示第一项</p>\n</div></li><li><span class='pre'>loop</span> : Boolean<div class='sub-desc'><p>是否循环切换,只有轮播切换时,才能自动轮播</p>\n</div></li><li><span class='pre'>autoPlay</span> : Boolean<div class='sub-desc'><p>是否自动轮播</p>\n</div></li><li><span class='pre'>duration</span> : Number<div class='sub-desc'><p>自动轮播时的间隔时间,单位ms</p>\n</div></li><li><span class='pre'>indicator</span> : Boolean<div class='sub-desc'><p>是否生成banner提示器,true右下角出现小点</p>\n</div></li><li><span class='pre'>callBack</span> : Function<div class='sub-desc'><p>轮播显示某项时的回调函数</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>当前显示的项索引</p>\n</div></li></ul></div></li><li><span class='pre'>clickBack</span> : Function<div class='sub-desc'><p>切换项时被点击时的回调函数,此处主要是为了处理复制项与第一项的点击事件进行处理,\n 让用户不关注点击的是第一项或是复制项,回调作用域为组件对象</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>点击的项索引</p>\n</div></li></ul></div></li></ul></div></div></div></div></div><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-method'>Methods</h3><div class='subsection'><div id='method-constructor' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-constructor' target='_blank' class='view-source'>view source</a></div><strong class='new-keyword'>new</strong><a href='#!/api/HammerCarousel-method-constructor' class='name expandable'>HammerCarousel</a>( <span class='pre'>slt, option</span> ) : <a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a><span class=\"signature\"></span></div><div class='description'><div class='short'>不能直接访问该类,调用 ipu.hammerCarousel生成实例 ...</div><div class='long'><p>不能直接访问该类,调用 <a href=\"#!/api/ipu-method-hammerCarousel\" rel=\"ipu-method-hammerCarousel\" class=\"docClass\">ipu.hammerCarousel</a>生成实例</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>slt</span> : String|JqueryObj<div class='sub-desc'><p>jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom</p>\n</div></li><li><span class='pre'>option</span> : Object<div class='sub-desc'><p>组件配置参数,默认配置见 <a href=\"#!/api/HammerCarousel-cfg-defaultOption\" rel=\"HammerCarousel-cfg-defaultOption\" class=\"docClass\">defaultOption</a></p>\n</div></li></ul><h3 class='pa'>Returns</h3><ul><li><span class='pre'><a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a></span><div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-next' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-next' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-next' class='name expandable'>next</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>切换到下一项 ...</div><div class='long'><p>切换到下一项</p>\n</div></div></div><div id='method-play' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-play' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-play' class='name expandable'>play</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>自动轮播 ...</div><div class='long'><p>自动轮播</p>\n</div></div></div><div id='method-prev' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-prev' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-prev' class='name expandable'>prev</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>切换到上一项 ...</div><div class='long'><p>切换到上一项</p>\n</div></div></div><div id='method-refresh' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-refresh' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-refresh' class='name expandable'>refresh</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>宽度信息或尺寸信息发生变更时,进行刷新计算\n判断是否需要重新计算尺寸,若宽度尺寸发生变化,进行重新尺寸计算 ...</div><div class='long'><p>宽度信息或尺寸信息发生变更时,进行刷新计算\n判断是否需要重新计算尺寸,若宽度尺寸发生变化,进行重新尺寸计算</p>\n</div></div></div><div id='method-show' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-show' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-show' class='name expandable'>show</a>( <span class='pre'>index</span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>切换显示指定项 ...</div><div class='long'><p>切换显示指定项</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>要切换到的项索引</p>\n</div></li></ul></div></div></div><div id='method-stop' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-stop' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-stop' class='name expandable'>stop</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>停止自动滚动 ...</div><div class='long'><p>停止自动滚动</p>\n</div></div></div></div></div></div></div>","meta":{}});
|
|
1
|
Ext.data.JsonP.HammerCarousel({"tagname":"class","name":"HammerCarousel","autodetected":{},"files":[{"filename":"ipu.js","href":"ipu.html#HammerCarousel"}],"uses":["Hammer.js"],"members":[{"name":"defaultOption","tagname":"cfg","owner":"HammerCarousel","id":"cfg-defaultOption","meta":{}},{"name":"cloneItem","tagname":"property","owner":"HammerCarousel","id":"property-cloneItem","meta":{}},{"name":"currentIndex","tagname":"property","owner":"HammerCarousel","id":"property-currentIndex","meta":{}},{"name":"constructor","tagname":"method","owner":"HammerCarousel","id":"method-constructor","meta":{}},{"name":"next","tagname":"method","owner":"HammerCarousel","id":"method-next","meta":{}},{"name":"play","tagname":"method","owner":"HammerCarousel","id":"method-play","meta":{}},{"name":"prev","tagname":"method","owner":"HammerCarousel","id":"method-prev","meta":{}},{"name":"refresh","tagname":"method","owner":"HammerCarousel","id":"method-refresh","meta":{}},{"name":"show","tagname":"method","owner":"HammerCarousel","id":"method-show","meta":{}},{"name":"stop","tagname":"method","owner":"HammerCarousel","id":"method-stop","meta":{}}],"alternateClassNames":[],"aliases":{},"id":"class-HammerCarousel","short_doc":"通过hammer.js实现的banner功能组件,\n因为实现轮播,显示第一项后,再显示第一项,所以第一项有被复制到添加到最后\n\n<!-- 组件html结构如下,li里的内容用户可自定义 -->\n <div clas...","component":false,"superclasses":[],"subclasses":[],"mixedInto":[],"mixins":[],"parentMixins":[],"requires":[],"html":"<div><pre class=\"hierarchy\"><h4>Uses</h4><div class='dependency'>Hammer.js</div><h4>Files</h4><div class='dependency'><a href='source/ipu.html#HammerCarousel' target='_blank'>ipu.js</a></div></pre><div class='doc-contents'><p>通过hammer.js实现的banner功能组件,\n因为实现轮播,显示第一项后,再显示第一项,所以第一项有被复制到添加到最后</p>\n\n<pre class='inline-example '><code><!-- 组件html结构如下,li里的内容用户可自定义 -->\n <div class=\"ipu-carousel ipu-hammer-carousel\">\n <ul class=\"ipu-carousel-wrapper\">\n <li ><img src=\"../../biz/img/01.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/02.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/03.jpg\" alt=\"\"></li>\n <li ><img src=\"../../biz/img/04.jpg\" alt=\"\"></li>\n </ul>\n </div>\n</code></pre>\n</div><div class='members'><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-cfg'>Config options</h3><div class='subsection'><div id='cfg-defaultOption' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-cfg-defaultOption' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-cfg-defaultOption' class='name expandable'>defaultOption</a> : Object<span class=\"signature\"></span></div><div class='description'><div class='short'>组件默认配置项 ...</div><div class='long'><p>组件默认配置项</p>\n<p>Defaults to: <code>{index: null, loop: false, autoPlay: false, duration: 3000, indicator: false, callBack: null, clickBack: null}</code></p><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>初始化时显示第几项,用户未指定时,会查找子项内容上有ipu-current的项显示,默认显示第一项</p>\n</div></li><li><span class='pre'>loop</span> : Boolean<div class='sub-desc'><p>是否循环切换,只有轮播切换时,才能自动轮播</p>\n</div></li><li><span class='pre'>autoPlay</span> : Boolean<div class='sub-desc'><p>是否自动轮播</p>\n</div></li><li><span class='pre'>duration</span> : Number<div class='sub-desc'><p>自动轮播时的间隔时间,单位ms</p>\n</div></li><li><span class='pre'>indicator</span> : Boolean<div class='sub-desc'><p>是否生成banner提示器,true右下角出现小点</p>\n</div></li><li><span class='pre'>callBack</span> : Function<div class='sub-desc'><p>轮播显示某项时的回调函数</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>当前显示的项索引</p>\n</div></li></ul></div></li><li><span class='pre'>clickBack</span> : Function<div class='sub-desc'><p>切换项时被点击时的回调函数,此处主要是为了处理复制项与第一项的点击事件进行处理,\n 让用户不关注点击的是第一项或是复制项,回调作用域为组件对象</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>点击的项索引</p>\n</div></li></ul></div></li></ul></div></div></div></div></div><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-property'>Properties</h3><div class='subsection'><div id='property-cloneItem' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-property-cloneItem' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-property-cloneItem' class='name expandable'>cloneItem</a> : Boolean<span class=\"signature\"></span></div><div class='description'><div class='short'>循环展示时,第一项会被复制,显示项是第一项时,是否为第一项的复制项 ...</div><div class='long'><p>循环展示时,第一项会被复制,显示项是第一项时,是否为第一项的复制项</p>\n<p>Defaults to: <code>false</code></p></div></div></div><div id='property-currentIndex' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-property-currentIndex' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-property-currentIndex' class='name expandable'>currentIndex</a> : Number<span class=\"signature\"></span></div><div class='description'><div class='short'>当前显示子项索引,从0开始 ...</div><div class='long'><p>当前显示子项索引,从0开始</p>\n<p>Defaults to: <code>0</code></p></div></div></div></div></div><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-method'>Methods</h3><div class='subsection'><div id='method-constructor' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-constructor' target='_blank' class='view-source'>view source</a></div><strong class='new-keyword'>new</strong><a href='#!/api/HammerCarousel-method-constructor' class='name expandable'>HammerCarousel</a>( <span class='pre'>slt, option</span> ) : <a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a><span class=\"signature\"></span></div><div class='description'><div class='short'>不能直接访问该类,调用 ipu.hammerCarousel生成实例 ...</div><div class='long'><p>不能直接访问该类,调用 <a href=\"#!/api/ipu-method-hammerCarousel\" rel=\"ipu-method-hammerCarousel\" class=\"docClass\">ipu.hammerCarousel</a>生成实例</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>slt</span> : String|JqueryObj<div class='sub-desc'><p>jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom</p>\n</div></li><li><span class='pre'>option</span> : Object<div class='sub-desc'><p>组件配置参数,默认配置见 <a href=\"#!/api/HammerCarousel-cfg-defaultOption\" rel=\"HammerCarousel-cfg-defaultOption\" class=\"docClass\">defaultOption</a></p>\n</div></li></ul><h3 class='pa'>Returns</h3><ul><li><span class='pre'><a href=\"#!/api/HammerCarousel\" rel=\"HammerCarousel\" class=\"docClass\">HammerCarousel</a></span><div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-next' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-next' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-next' class='name expandable'>next</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>切换到下一项 ...</div><div class='long'><p>切换到下一项</p>\n</div></div></div><div id='method-play' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-play' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-play' class='name expandable'>play</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>自动轮播 ...</div><div class='long'><p>自动轮播</p>\n</div></div></div><div id='method-prev' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-prev' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-prev' class='name expandable'>prev</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>切换到上一项 ...</div><div class='long'><p>切换到上一项</p>\n</div></div></div><div id='method-refresh' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-refresh' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-refresh' class='name expandable'>refresh</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>宽度信息或尺寸信息发生变更时,进行刷新计算\n判断是否需要重新计算尺寸,若宽度尺寸发生变化,进行重新尺寸计算 ...</div><div class='long'><p>宽度信息或尺寸信息发生变更时,进行刷新计算\n判断是否需要重新计算尺寸,若宽度尺寸发生变化,进行重新尺寸计算</p>\n</div></div></div><div id='method-show' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-show' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-show' class='name expandable'>show</a>( <span class='pre'>index</span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>切换显示指定项 ...</div><div class='long'><p>切换显示指定项</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>index</span> : Number<div class='sub-desc'><p>要切换到的项索引</p>\n</div></li></ul></div></div></div><div id='method-stop' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='HammerCarousel'>HammerCarousel</span><br/><a href='source/ipu.html#HammerCarousel-method-stop' target='_blank' class='view-source'>view source</a></div><a href='#!/api/HammerCarousel-method-stop' class='name expandable'>stop</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>停止自动滚动 ...</div><div class='long'><p>停止自动滚动</p>\n</div></div></div></div></div></div></div>","meta":{}});
|
|
@ -1 +1 @@
|
1
|
|
Ext.data.JsonP.Refresh({"tagname":"class","name":"Refresh","autodetected":{},"files":[{"filename":"ipu.js","href":"ipu.html#Refresh"}],"uses":["IScroll.js"],"members":[{"name":"defaultOption","tagname":"cfg","owner":"Refresh","id":"cfg-defaultOption","meta":{}},{"name":"bottomEnable","tagname":"property","owner":"Refresh","id":"property-bottomEnable","meta":{}},{"name":"bottomLoading","tagname":"property","owner":"Refresh","id":"property-bottomLoading","meta":{}},{"name":"topEnable","tagname":"property","owner":"Refresh","id":"property-topEnable","meta":{}},{"name":"topLoading","tagname":"property","owner":"Refresh","id":"property-topLoading","meta":{}},{"name":"constructor","tagname":"method","owner":"Refresh","id":"method-constructor","meta":{}},{"name":"enableBottom","tagname":"method","owner":"Refresh","id":"method-enableBottom","meta":{}},{"name":"enableTop","tagname":"method","owner":"Refresh","id":"method-enableTop","meta":{}},{"name":"endBottomLoading","tagname":"method","owner":"Refresh","id":"method-endBottomLoading","meta":{}},{"name":"endTopLoading","tagname":"method","owner":"Refresh","id":"method-endTopLoading","meta":{}},{"name":"refresh","tagname":"method","owner":"Refresh","id":"method-refresh","meta":{}}],"alternateClassNames":[],"aliases":{},"id":"class-Refresh","short_doc":"通过IScroll.js实现上拉下拉加载\n\n<!-- 组件html结构,最外层div应有一个固定的高度,会在此元素上初始化iScroll -->\n <div>\n <div class=\"ipu-ref...","component":false,"superclasses":[],"subclasses":[],"mixedInto":[],"mixins":[],"parentMixins":[],"requires":[],"html":"<div><pre class=\"hierarchy\"><h4>Uses</h4><div class='dependency'>IScroll.js</div><h4>Files</h4><div class='dependency'><a href='source/ipu.html#Refresh' target='_blank'>ipu.js</a></div></pre><div class='doc-contents'><p>通过IScroll.js实现上拉下拉加载</p>\n\n<pre class='inline-example '><code><!-- 组件html结构,最外层div应有一个固定的高度,会在此元素上初始化iScroll -->\n <div>\n <div class=\"ipu-refresh-wrapper\">\n <!-- 此处组件初始化后,会添加上拉html -->\n <div class=\"refresh-content\">\n 内容区...\n </div>\n <!-- 此处组件初始化后,会添加下拉html -->\n </div>\n </div>\n</code></pre>\n</div><div class='members'><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-cfg'>Config options</h3><div class='subsection'><div id='cfg-defaultOption' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-cfg-defaultOption' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-cfg-defaultOption' class='name expandable'>defaultOption</a> : Object<span class=\"signature\"></span></div><div class='description'><div class='short'>刷新组件默认配置 ...</div><div class='long'><p>刷新组件默认配置</p>\n<p>Defaults to: <code>{bottomLoadFun: null, topLoadFun: null, initEnableTop: true, initEnableBottom: true, bottomLoadHtml: '<div class="ipu-refresh-bottom"><span class="ipu-refresh-loading"></span></div>', topLoadHtml: '<div class="ipu-refresh-top"><span class="ipu-refresh-loading"></span><div class="ipu-refresh-arrow"></div></div>', bottomAddLen: 0, iScrollOption: {}}</code></p><ul><li><span class='pre'>bottomLoadFun</span> : Function<div class='sub-desc'><p>上拉时,触发底加载的响应函数</p>\n<p>Defaults to: <code>null</code></p></div></li><li><span class='pre'>topLoadFun</span> : Function<div class='sub-desc'><p>下拉时,触发顶部加载的响应函数</p>\n<p>Defaults to: <code>null</code></p></div></li><li><span class='pre'>initEnableTop</span> : Boolean<div class='sub-desc'><p>初始化时,是否启用顶部加载功能</p>\n<p>Defaults to: <code>true</code></p></div></li><li><span class='pre'>initEnableBottom</span> : Boolean<div class='sub-desc'><p>初始化时,是否启用底部加载功能</p>\n<p>Defaults to: <code>true</code></p></div></li><li><span class='pre'>bottomLoadHtml</span> : String<div class='sub-desc'><p>底部加载时显示的html片段,不建议变动</p>\n<p>Defaults to: <code>...</code></p></div></li><li><span class='pre'>topLoadHtml</span> : String<div class='sub-desc'><p>顶部加载时显示的html片段,不建议变动</p>\n<p>Defaults to: <code>...</code></p></div></li><li><span class='pre'>bottomAddLen</span> : Number<div class='sub-desc'><p>距离底部多远时,触发底部加载</p>\n<p>Defaults to: <code>0</code></p></div></li><li><span class='pre'>iScrollOption</span> : Object<div class='sub-desc'><p>上下拉使用的是IScroll组件,通过此参数配置IScroll初始化的参数</p>\n<p>Defaults to: <code>{}</code></p></div></li></ul></div></div></div></div></div><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-property'>Properties</h3><div class='subsection'><div id='property-bottomEnable' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-property-bottomEnable' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-property-bottomEnable' class='name expandable'>bottomEnable</a> : Boolean<span class=\"signature\"></span></div><div class='description'><div class='short'><p>底部是否可加载</p>\n</div><div class='long'><p>底部是否可加载</p>\n</div></div></div><div id='property-bottomLoading' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-property-bottomLoading' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-property-bottomLoading' class='name expandable'>bottomLoading</a> : Boolean<span class=\"signature\"></span></div><div class='description'><div class='short'>底部是否加载中 ...</div><div class='long'><p>底部是否加载中</p>\n<p>Defaults to: <code>false</code></p></div></div></div><div id='property-topEnable' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-property-topEnable' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-property-topEnable' class='name expandable'>topEnable</a> : Boolean<span class=\"signature\"></span></div><div class='description'><div class='short'><p>顶部是否可加载</p>\n</div><div class='long'><p>顶部是否可加载</p>\n</div></div></div><div id='property-topLoading' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-property-topLoading' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-property-topLoading' class='name expandable'>topLoading</a> : Boolean<span class=\"signature\"></span></div><div class='description'><div class='short'>顶部是否加载中 ...</div><div class='long'><p>顶部是否加载中</p>\n<p>Defaults to: <code>false</code></p></div></div></div></div></div><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-method'>Methods</h3><div class='subsection'><div id='method-constructor' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-constructor' target='_blank' class='view-source'>view source</a></div><strong class='new-keyword'>new</strong><a href='#!/api/Refresh-method-constructor' class='name expandable'>Refresh</a>( <span class='pre'>slt, option</span> ) : <a href=\"#!/api/Refresh\" rel=\"Refresh\" class=\"docClass\">Refresh</a><span class=\"signature\"></span></div><div class='description'><div class='short'>不能直接访问该类,调用ipu.refresh(slt, option)生成实例 ...</div><div class='long'><p>不能直接访问该类,调用<a href=\"#!/api/ipu-method-refresh\" rel=\"ipu-method-refresh\" class=\"docClass\">ipu.refresh</a>(slt, option)生成实例</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>slt</span> : String|JqueryObj|Dom<div class='sub-desc'><p>jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom</p>\n</div></li><li><span class='pre'>option</span> : Object<div class='sub-desc'><p>组件参数</p>\n</div></li></ul><h3 class='pa'>Returns</h3><ul><li><span class='pre'><a href=\"#!/api/Refresh\" rel=\"Refresh\" class=\"docClass\">Refresh</a></span><div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-enableBottom' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-enableBottom' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-enableBottom' class='name expandable'>enableBottom</a>( <span class='pre'>enable</span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>是否启用底部加载功能 ...</div><div class='long'><p>是否启用底部加载功能</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>enable</span> : Boolean<div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-enableTop' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-enableTop' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-enableTop' class='name expandable'>enableTop</a>( <span class='pre'>enable</span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>是否启动顶部加载功能 ...</div><div class='long'><p>是否启动顶部加载功能</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>enable</span> : Boolean<div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-endBottomLoading' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-endBottomLoading' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-endBottomLoading' class='name expandable'>endBottomLoading</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>结束底部加载,defaultOption.bottomLoadFun中处理完加载后,最后调用此方法 ...</div><div class='long'><p>结束底部加载,defaultOption.bottomLoadFun中处理完加载后,最后调用此方法</p>\n</div></div></div><div id='method-endTopLoading' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-endTopLoading' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-endTopLoading' class='name expandable'>endTopLoading</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>结束顶部加载,defaultOption.topLoadFun中处理完加载后,最后调用此方法 ...</div><div class='long'><p>结束顶部加载,defaultOption.topLoadFun中处理完加载后,最后调用此方法</p>\n</div></div></div><div id='method-refresh' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-refresh' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-refresh' class='name expandable'>refresh</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>在内容发生变化时,但是又不是因为顶部加载或底部加载导致的,此时调用此方法刷新IScroll ...</div><div class='long'><p>在内容发生变化时,但是又不是因为顶部加载或底部加载导致的,此时调用此方法刷新IScroll</p>\n</div></div></div></div></div></div></div>","meta":{}});
|
|
1
|
Ext.data.JsonP.Refresh({"tagname":"class","name":"Refresh","autodetected":{},"files":[{"filename":"ipu.js","href":"ipu.html#Refresh"}],"uses":["IScroll.js"],"members":[{"name":"defaultOption","tagname":"cfg","owner":"Refresh","id":"cfg-defaultOption","meta":{}},{"name":"bottomEnable","tagname":"property","owner":"Refresh","id":"property-bottomEnable","meta":{}},{"name":"bottomLoading","tagname":"property","owner":"Refresh","id":"property-bottomLoading","meta":{}},{"name":"topEnable","tagname":"property","owner":"Refresh","id":"property-topEnable","meta":{}},{"name":"topLoading","tagname":"property","owner":"Refresh","id":"property-topLoading","meta":{}},{"name":"constructor","tagname":"method","owner":"Refresh","id":"method-constructor","meta":{}},{"name":"enableBottom","tagname":"method","owner":"Refresh","id":"method-enableBottom","meta":{}},{"name":"enableTop","tagname":"method","owner":"Refresh","id":"method-enableTop","meta":{}},{"name":"endBottomLoading","tagname":"method","owner":"Refresh","id":"method-endBottomLoading","meta":{}},{"name":"endTopLoading","tagname":"method","owner":"Refresh","id":"method-endTopLoading","meta":{}},{"name":"refresh","tagname":"method","owner":"Refresh","id":"method-refresh","meta":{}}],"alternateClassNames":[],"aliases":{},"id":"class-Refresh","short_doc":"通过IScroll.js实现上拉下拉加载\n\n<!-- 组件html结构,最外层div应有一个固定的高度,会在此元素上初始化iScroll -->\n <div>\n <div class=\"ipu-ref...","component":false,"superclasses":[],"subclasses":[],"mixedInto":[],"mixins":[],"parentMixins":[],"requires":[],"html":"<div><pre class=\"hierarchy\"><h4>Uses</h4><div class='dependency'>IScroll.js</div><h4>Files</h4><div class='dependency'><a href='source/ipu.html#Refresh' target='_blank'>ipu.js</a></div></pre><div class='doc-contents'><p>通过IScroll.js实现上拉下拉加载</p>\n\n<pre class='inline-example '><code><!-- 组件html结构,最外层div应有一个固定的高度,会在此元素上初始化iScroll -->\n <div>\n <div class=\"ipu-refresh-wrapper\">\n <!-- 此处组件初始化后,会添加上拉html -->\n <div class=\"refresh-content\">\n 内容区...\n </div>\n <!-- 此处组件初始化后,会添加下拉html -->\n </div>\n </div>\n</code></pre>\n</div><div class='members'><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-cfg'>Config options</h3><div class='subsection'><div id='cfg-defaultOption' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-cfg-defaultOption' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-cfg-defaultOption' class='name expandable'>defaultOption</a> : Object<span class=\"signature\"></span></div><div class='description'><div class='short'>刷新组件默认配置 ...</div><div class='long'><p>刷新组件默认配置</p>\n<p>Defaults to: <code>{bottomLoadFun: null, topLoadFun: null, initEnableTop: true, initEnableBottom: true, bottomLoadHtml: '<div class="ipu-refresh-bottom"><span class="ipu-refresh-loading"></span></div>', topLoadHtml: '<div class="ipu-refresh-top"><span class="ipu-refresh-loading"></span><div class="ipu-refresh-arrow"></div></div>', bottomAddLen: 0, iScrollOption: {}}</code></p><ul><li><span class='pre'>bottomLoadFun</span> : Function<div class='sub-desc'><p>上拉时,触发底加载的响应函数</p>\n<p>Defaults to: <code>null</code></p></div></li><li><span class='pre'>topLoadFun</span> : Function<div class='sub-desc'><p>下拉时,触发顶部加载的响应函数</p>\n<p>Defaults to: <code>null</code></p></div></li><li><span class='pre'>initEnableTop</span> : Boolean<div class='sub-desc'><p>初始化时,是否启用顶部加载功能</p>\n<p>Defaults to: <code>true</code></p></div></li><li><span class='pre'>initEnableBottom</span> : Boolean<div class='sub-desc'><p>初始化时,是否启用底部加载功能</p>\n<p>Defaults to: <code>true</code></p></div></li><li><span class='pre'>bottomLoadHtml</span> : String<div class='sub-desc'><p>底部加载时显示的html片段,不建议变动</p>\n<p>Defaults to: <code>...</code></p></div></li><li><span class='pre'>topLoadHtml</span> : String<div class='sub-desc'><p>顶部加载时显示的html片段,不建议变动</p>\n<p>Defaults to: <code>...</code></p></div></li><li><span class='pre'>bottomAddLen</span> : Number<div class='sub-desc'><p>距离底部多远时,触发底部加载</p>\n<p>Defaults to: <code>0</code></p></div></li></ul></div></div></div></div></div><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-property'>Properties</h3><div class='subsection'><div id='property-bottomEnable' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-property-bottomEnable' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-property-bottomEnable' class='name expandable'>bottomEnable</a> : Boolean<span class=\"signature\"></span></div><div class='description'><div class='short'><p>底部是否可加载</p>\n</div><div class='long'><p>底部是否可加载</p>\n</div></div></div><div id='property-bottomLoading' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-property-bottomLoading' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-property-bottomLoading' class='name expandable'>bottomLoading</a> : Boolean<span class=\"signature\"></span></div><div class='description'><div class='short'>底部是否加载中 ...</div><div class='long'><p>底部是否加载中</p>\n<p>Defaults to: <code>false</code></p></div></div></div><div id='property-topEnable' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-property-topEnable' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-property-topEnable' class='name expandable'>topEnable</a> : Boolean<span class=\"signature\"></span></div><div class='description'><div class='short'><p>顶部是否可加载</p>\n</div><div class='long'><p>顶部是否可加载</p>\n</div></div></div><div id='property-topLoading' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-property-topLoading' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-property-topLoading' class='name expandable'>topLoading</a> : Boolean<span class=\"signature\"></span></div><div class='description'><div class='short'>顶部是否加载中 ...</div><div class='long'><p>顶部是否加载中</p>\n<p>Defaults to: <code>false</code></p></div></div></div></div></div><div class='members-section'><div class='definedBy'>Defined By</div><h3 class='members-title icon-method'>Methods</h3><div class='subsection'><div id='method-constructor' class='member first-child not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-constructor' target='_blank' class='view-source'>view source</a></div><strong class='new-keyword'>new</strong><a href='#!/api/Refresh-method-constructor' class='name expandable'>Refresh</a>( <span class='pre'>slt, option</span> ) : <a href=\"#!/api/Refresh\" rel=\"Refresh\" class=\"docClass\">Refresh</a><span class=\"signature\"></span></div><div class='description'><div class='short'>不能直接访问该类,调用ipu.refresh(slt, option)生成实例 ...</div><div class='long'><p>不能直接访问该类,调用<a href=\"#!/api/ipu-method-refresh\" rel=\"ipu-method-refresh\" class=\"docClass\">ipu.refresh</a>(slt, option)生成实例</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>slt</span> : String|JqueryObj|Dom<div class='sub-desc'><p>jquery选择器字符串或jquery对象,用来查找要被组件初始化化的dom</p>\n</div></li><li><span class='pre'>option</span> : Object<div class='sub-desc'><p>组件参数</p>\n</div></li></ul><h3 class='pa'>Returns</h3><ul><li><span class='pre'><a href=\"#!/api/Refresh\" rel=\"Refresh\" class=\"docClass\">Refresh</a></span><div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-enableBottom' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-enableBottom' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-enableBottom' class='name expandable'>enableBottom</a>( <span class='pre'>enable</span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>是否启用底部加载功能 ...</div><div class='long'><p>是否启用底部加载功能</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>enable</span> : Boolean<div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-enableTop' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-enableTop' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-enableTop' class='name expandable'>enableTop</a>( <span class='pre'>enable</span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>是否启动顶部加载功能 ...</div><div class='long'><p>是否启动顶部加载功能</p>\n<h3 class=\"pa\">Parameters</h3><ul><li><span class='pre'>enable</span> : Boolean<div class='sub-desc'>\n</div></li></ul></div></div></div><div id='method-endBottomLoading' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-endBottomLoading' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-endBottomLoading' class='name expandable'>endBottomLoading</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>结束底部加载,defaultOption.bottomLoadFun中处理完加载后,最后调用此方法 ...</div><div class='long'><p>结束底部加载,defaultOption.bottomLoadFun中处理完加载后,最后调用此方法</p>\n</div></div></div><div id='method-endTopLoading' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-endTopLoading' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-endTopLoading' class='name expandable'>endTopLoading</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>结束顶部加载,defaultOption.topLoadFun中处理完加载后,最后调用此方法 ...</div><div class='long'><p>结束顶部加载,defaultOption.topLoadFun中处理完加载后,最后调用此方法</p>\n</div></div></div><div id='method-refresh' class='member not-inherited'><a href='#' class='side expandable'><span> </span></a><div class='title'><div class='meta'><span class='defined-in' rel='Refresh'>Refresh</span><br/><a href='source/ipu.html#Refresh-method-refresh' target='_blank' class='view-source'>view source</a></div><a href='#!/api/Refresh-method-refresh' class='name expandable'>refresh</a>( <span class='pre'></span> )<span class=\"signature\"></span></div><div class='description'><div class='short'>在内容发生变化时,但是又不是因为顶部加载或底部加载导致的,此时调用此方法刷新IScroll ...</div><div class='long'><p>在内容发生变化时,但是又不是因为顶部加载或底部加载导致的,此时调用此方法刷新IScroll</p>\n</div></div></div></div></div></div></div>","meta":{}});
|
|
@ -205,7 +205,7 @@
|
205
|
205
|
* <li ><img src="../../biz/img/02.jpg" alt=""></li>
|
206
|
206
|
* <li ><img src="../../biz/img/03.jpg" alt=""></li>
|
207
|
207
|
* <li ><img src="../../biz/img/04.jpg" alt=""></li>
|
208
|
|
* </ul>
|
|
208
|
* </ul>
|
209
|
209
|
* </div>
|
210
|
210
|
*
|
211
|
211
|
* @constructor 不能直接访问该类,使用ipu.carousel(slt, option)生成实例 {@link ipu#carousel}
|
|
@ -1267,9 +1267,13 @@
|
1267
|
1267
|
|
1268
|
1268
|
this.showItemSize = 1; // 假设一屏默认显示1个,所以做循环显示只需要复制一个子项
|
1269
|
1269
|
this.carouselItemWides = []; // 子项宽度尺寸
|
1270
|
|
this.currentIndex = 0; // 当前显示子项索引
|
|
1270
|
|
|
1271
|
<span id='HammerCarousel-property-currentIndex'> /** @property {Number} 当前显示子项索引,从0开始 */
|
|
1272
|
</span> this.currentIndex = 0; // 当前显示子项索引
|
1271
|
1273
|
this.moveLen = 0; // 当前滚动移动距离
|
1272
|
|
this.lastItem = false; // index是0的时候,有可能显示的是第一项,也有可能显示的是复制项,这个参数用来标记是否复制项
|
|
1274
|
|
|
1275
|
<span id='HammerCarousel-property-cloneItem'> /** @type {Boolean} 循环展示时,第一项会被复制,显示项是第一项时,是否为第一项的复制项 */
|
|
1276
|
</span> this.cloneItem = false; // index是0的时候,有可能显示的是第一项,也有可能显示的是复制项,这个参数用来标记是否复制项
|
1273
|
1277
|
|
1274
|
1278
|
if (this.option.indicator) {
|
1275
|
1279
|
this._addIndicator();
|
|
@ -1441,7 +1445,7 @@
|
1441
|
1445
|
this._pause();
|
1442
|
1446
|
$(this.wrapper).toggleClass("ipu-carousel-animate", animate);
|
1443
|
1447
|
this.currentIndex = index % this.itemSize;
|
1444
|
|
this.lastItem = index == this.itemSize;
|
|
1448
|
this.cloneItem = index == this.itemSize;
|
1445
|
1449
|
|
1446
|
1450
|
this.moveLen = this.carouselItemWides[index];
|
1447
|
1451
|
var move = -this.moveLen + "px";
|
|
@ -1450,7 +1454,7 @@
|
1450
|
1454
|
|
1451
|
1455
|
var currentIndex = this.currentIndex;
|
1452
|
1456
|
if (animate && this.option.callBack) {
|
1453
|
|
this.option.callBack(currentIndex, this.lastItem);//返回当前索引,以及是滞最后一项参数
|
|
1457
|
this.option.callBack(currentIndex, this.cloneItem);//返回当前索引,以及是滞最后一项参数
|
1454
|
1458
|
}
|
1455
|
1459
|
|
1456
|
1460
|
if (this.indicator) {
|
|
@ -3183,6 +3187,7 @@
|
3183
|
3187
|
var me = this;
|
3184
|
3188
|
|
3185
|
3189
|
this.iScrollOption = {
|
|
3190
|
vScrollbar: false, // 不显示滚动条
|
3186
|
3191
|
onScrollMove: function (e) {
|
3187
|
3192
|
if (me.topEnable && !me.topLoading) { // 顶部是松手才加载
|
3188
|
3193
|
if (this.y >= me.topPullOffset && !me.topEl.hasClass('ipu-refresh-toload')) { // 达到刷新距离,更新显示状态
|
|
@ -3226,7 +3231,6 @@
|
3226
|
3231
|
* @cfg {String} defaultOption.bottomLoadHtml=... 底部加载时显示的html片段,不建议变动
|
3227
|
3232
|
* @cfg {String} defaultOption.topLoadHtml=... 顶部加载时显示的html片段,不建议变动
|
3228
|
3233
|
* @cfg {Number} defaultOption.bottomAddLen=0 距离底部多远时,触发底部加载
|
3229
|
|
* @cfg {Object} defaultOption.iScrollOption={} 上下拉使用的是IScroll组件,通过此参数配置IScroll初始化的参数
|
3230
|
3234
|
*
|
3231
|
3235
|
*/
|
3232
|
3236
|
Refresh.prototype.defaultOption = {
|
|
@ -13,7 +13,7 @@
|
13
|
13
|
* <li ><img src="../../biz/img/02.jpg" alt=""></li>
|
14
|
14
|
* <li ><img src="../../biz/img/03.jpg" alt=""></li>
|
15
|
15
|
* <li ><img src="../../biz/img/04.jpg" alt=""></li>
|
16
|
|
* </ul>
|
|
16
|
* </ul>
|
17
|
17
|
* </div>
|
18
|
18
|
*
|
19
|
19
|
* @constructor 不能直接访问该类,使用ipu.carousel(slt, option)生成实例 {@link ipu#carousel}
|
|
@ -68,9 +68,13 @@
|
68
|
68
|
|
69
|
69
|
this.showItemSize = 1; // 假设一屏默认显示1个,所以做循环显示只需要复制一个子项
|
70
|
70
|
this.carouselItemWides = []; // 子项宽度尺寸
|
|
71
|
|
|
72
|
/** @property {Number} 当前显示子项索引,从0开始 */
|
71
|
73
|
this.currentIndex = 0; // 当前显示子项索引
|
72
|
74
|
this.moveLen = 0; // 当前滚动移动距离
|
73
|
|
this.lastItem = false; // index是0的时候,有可能显示的是第一项,也有可能显示的是复制项,这个参数用来标记是否复制项
|
|
75
|
|
|
76
|
/** @type {Boolean} 循环展示时,第一项会被复制,显示项是第一项时,是否为第一项的复制项 */
|
|
77
|
this.cloneItem = false; // index是0的时候,有可能显示的是第一项,也有可能显示的是复制项,这个参数用来标记是否复制项
|
74
|
78
|
|
75
|
79
|
if (this.option.indicator) {
|
76
|
80
|
this._addIndicator();
|
|
@ -242,7 +246,7 @@
|
242
|
246
|
this._pause();
|
243
|
247
|
$(this.wrapper).toggleClass("ipu-carousel-animate", animate);
|
244
|
248
|
this.currentIndex = index % this.itemSize;
|
245
|
|
this.lastItem = index == this.itemSize;
|
|
249
|
this.cloneItem = index == this.itemSize;
|
246
|
250
|
|
247
|
251
|
this.moveLen = this.carouselItemWides[index];
|
248
|
252
|
var move = -this.moveLen + "px";
|
|
@ -251,7 +255,7 @@
|
251
|
255
|
|
252
|
256
|
var currentIndex = this.currentIndex;
|
253
|
257
|
if (animate && this.option.callBack) {
|
254
|
|
this.option.callBack(currentIndex, this.lastItem);//返回当前索引,以及是滞最后一项参数
|
|
258
|
this.option.callBack(currentIndex, this.cloneItem);//返回当前索引,以及是滞最后一项参数
|
255
|
259
|
}
|
256
|
260
|
|
257
|
261
|
if (this.indicator) {
|
|
@ -78,7 +78,6 @@
|
78
|
78
|
* @cfg {String} defaultOption.bottomLoadHtml=... 底部加载时显示的html片段,不建议变动
|
79
|
79
|
* @cfg {String} defaultOption.topLoadHtml=... 顶部加载时显示的html片段,不建议变动
|
80
|
80
|
* @cfg {Number} defaultOption.bottomAddLen=0 距离底部多远时,触发底部加载
|
81
|
|
* @cfg {Object} defaultOption.iScrollOption={} 上下拉使用的是IScroll组件,通过此参数配置IScroll初始化的参数
|
82
|
81
|
*
|
83
|
82
|
*/
|
84
|
83
|
Refresh.prototype.defaultOption = {
|
|
@ -67,7 +67,7 @@ $rem-base-width : 375;
|
67
|
67
|
$rem-base-size-num : 100;
|
68
|
68
|
$rem-base-size : $rem-base-size-num * 1px;
|
69
|
69
|
$vw-base-size: $rem-base-size-num / ($rem-base-width / 100) * 1vw;
|
70
|
|
$rem-query-widths : (320, 350, 360, 375, 384, 400, 414, 450, 480, 520, 640, 700, 750, 800, 850, 960);
|
|
70
|
$rem-query-widths : (320, 350, 360, 375, 384, 400, 414, 450, 480, 520, 640, 700, 750);
|
71
|
71
|
|
72
|
72
|
$rem-sm: .9;
|
73
|
73
|
$rem-lg: 1.1;
|