vue-awesome-picker.js.map 348 KB
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///vue-awesome-picker.js","webpack:///webpack/bootstrap 0fafbab0ccbb16e3b6bf","webpack:///src/lib/vue-awesome-picker.vue","webpack:///./src/lib/data/range.js","webpack:///./src/lib/index.js","webpack:///./src/lib/vue-awesome-picker.vue","webpack:///./src/lib/vue-awesome-picker.vue?5a3c","webpack:///./src/lib/vue-awesome-picker.vue?8c43","webpack:///./node_modules/_css-loader@0.28.11@css-loader/lib/css-base.js","webpack:///./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/addStylesClient.js","webpack:///./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/listToStyles.js","webpack:///./node_modules/_vue-loader@13.7.3@vue-loader/lib/component-normalizer.js","webpack:///./node_modules/_better-scroll@1.15.1@better-scroll/dist/bscroll.esm.js","webpack:///./src/lib/data/time.js","webpack:///./src/lib/data/date.js","webpack:///./src/lib/vue-awesome-picker.vue?af83"],"names":["root","factory","exports","module","define","amd","self","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","_toConsumableArray","arr","Array","isArray","arr2","length","from","__WEBPACK_IMPORTED_MODULE_0_better_scroll__","__WEBPACK_IMPORTED_MODULE_1__data_time_js__","__WEBPACK_IMPORTED_MODULE_2__data_date_js__","props","data","type","default","anchor","String","textTitle","textConfirm","textCancel","colorTitle","colorConfirm","colorCancel","swipeTime","Number","display","dataChange","pickerData","_dataGetter","pickerAnchor","_anchorGetter","wheels","watch","_setPickerData","computed","proxyData","proxyAnchor","dataType","methods","concat","_this","map","item","index","value","indexOf","show","_this2","_updatePickerData","$nextTick","wheelWrapper","$refs","forEach","_createWheel","enable","_wheelToAnchor","_destroyExtraWheels","wheel","hide","disable","_this3","refresh","children","selectedIndex","rotate","on","console","log","_cascadePickerChange","newIndex","_getCurrentValue","splice","wheelTo","_this4","j","getSelectedIndex","push","_this5","dataLength","destroy","_this6","wheelIndex","arguments","undefined","wheelData","_reloadWheel","slice","_this7","scroll","querySelector","$set","confirm","some","isInTransition","selectedValues","$emit","cancel","polyfill","unit","__WEBPACK_IMPORTED_MODULE_0__vue_awesome_picker_vue__","picker","install","Vue","component","AwesomePicker","window","use","injectStyle","ssrContext","__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_script_index_0_vue_awesome_picker_vue__","__WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_13_7_3_vue_loader_lib_template_compiler_index_id_data_v_d86a61f6_hasScoped_true_buble_transforms_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_template_index_0_vue_awesome_picker_vue__","normalizeComponent","__vue_styles__","Component","content","locals","cssWithMappingToString","useSourceMap","cssMapping","btoa","sourceMapping","toComment","sources","source","sourceRoot","join","sourceMap","unescape","encodeURIComponent","JSON","stringify","list","toString","mediaQuery","alreadyImportedModules","id","addStylesToDom","styles","domStyle","stylesInDom","refs","parts","addStyle","createStyleElement","styleElement","document","createElement","head","appendChild","obj","update","remove","ssrIdKey","isProduction","noop","parentNode","removeChild","isOldIE","styleIndex","singletonCounter","singletonElement","applyToSingletonTag","bind","applyToTag","newObj","css","media","styleSheet","cssText","replaceText","cssNode","createTextNode","childNodes","insertBefore","setAttribute","options","ssrId","firstChild","hasDocument","DEBUG","Error","listToStyles","getElementsByTagName","navigator","test","userAgent","toLowerCase","parentId","_isProduction","_options","newList","mayRemove","textStore","replacement","filter","Boolean","newStyles","part","rawScriptExports","compiledTemplate","functionalTemplate","injectStyles","scopeId","moduleIdentifier","esModule","scriptExports","render","staticRenderFns","_compiled","functional","_scopeId","hook","context","$vnode","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","existing","beforeCreate","_injectStyles","h","spliceOne","pop","getNow","performance","now","timing","navigationStart","Date","extend","target","_len","rest","_key","key","isUndef","v","getDistance","x","y","Math","sqrt","prefixStyle","style","vendor","charAt","toUpperCase","substr","addEvent","el","fn","capture","addEventListener","passive","removeEvent","removeEventListener","offset","left","top","offsetLeft","offsetTop","offsetParent","offsetToBody","rect","getBoundingClientRect","pageXOffset","pageYOffset","getRect","SVGElement","width","height","offsetWidth","offsetHeight","preventDefaultException","exceptions","tap","e","eventName","ev","createEvent","initEvent","pageX","pageY","dispatchEvent","click","event","bubbles","cancelable","posSrc","eventSource","changedTouches","screenX","screenY","clientX","clientY","MouseEvent","forwardedTouchEvent","_constructed","dblclick","prepend","before","child","momentum","current","start","time","lowerMargin","upperMargin","wrapperSize","distance","speed","abs","deceleration","itemHeight","swipeBounceTime","duration","rate","destination","_findNearestValidWheel","max","min","round","warn","msg","error","assert","condition","createScrollbar","direction","scrollbar","indicator","className","Indicator","scroller","wrapper","wrapperStyle","indicatorStyle","fade","visible","opacity","sizeRatioX","sizeRatioY","maxPosX","maxPosY","interactive","_addDOMEvents","isTombstoneNode","node","classList","contains","InfiniteScroller","createTombstone","fetch","firstAttachedItem","lastAttachedItem","anchorScrollTop","anchorItem","tombstoneHeight","tombstoneWidth","tombstones","tombstonesAnimationHandlers","items","loadedItems","requestInProgress","hasMore","wrapperEl","scrollerEl","onResize","_onResizeHandler","setTimeout","onScroll","BScroll","scrollerStyle","_init","slicedToArray","sliceIterator","_arr","_n","_d","_e","_s","_i","Symbol","iterator","next","done","err","TypeError","toConsumableArray","inBrowser","ua","isWeChatDevTools","isAndroid","elementStyle","transformNames","standard","webkit","Moz","O","ms","cssVendor","transform","transition","hasPerspective","hasTouch","hasTransform","hasTransition","transitionTimingFunction","transitionDuration","transitionDelay","transformOrigin","transitionEnd","TOUCH_EVENT","eventType","touchstart","touchmove","touchend","mousedown","mousemove","mouseup","DEFAULT_OPTIONS","startX","startY","scrollX","scrollY","freeScroll","directionLockThreshold","eventPassthrough","bounce","bounceTime","momentumLimitTime","momentumLimitDistance","flickLimitTime","flickLimitDistance","resizePolling","probeType","preventDefault","tagName","HWCompositing","useTransition","useTransform","bindToWrapper","disableMouse","disableTouch","observeDOM","autoBlur","snap","pullDownRefresh","pullUpLoad","mouseWheel","stopPropagation","zoom","infinity","ease","swipe","t","swipeBounce","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","callback","interval","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","clearTimeout","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_LEFT","DIRECTION_RIGHT","PROBE_DEBOUNCE","PROBE_REALTIME","handleEvent","_start","_move","_end","_shouldShow","transitionTime","_calculate","updatePosition","hold","fadeTimeout","indicatorHeight","_height","translateZ","indicatorWidth","_width","easing","_removeDOMEvents","point","touches","initiated","moved","lastPointX","lastPointY","startTime","_handleMoveEvents","trigger","deltaX","deltaY","newX","newY","_pos","snapOption","_snapOption$easing","_nearestSnap","directionX","directionY","currentPage","scrollTo","hasVerticalScroll","hasHorizontalScroll","wrapperHeight","clientHeight","scrollerHeight","maxScrollY","wrapperWidth","clientWidth","scrollerWidth","maxScrollX","eventOperation","_handleDOMEvents","DEFAULT_SCROLL_RUNWAY","handler","infiniteScroller","scrollTop","delta","_calculateAnchoredItem","lastScreenItem","end","fill","maybeRequestContent","tombstone","position","attachContent","itemsNeeded","then","addContent","tombstoneLen","_removeTombstones","curPos","_fixScrollPosition","_setupAnimations","resetPosition","stop","_addItem","unusedNodes","_collectUnusedNodes","tombstoneAnimations","_createDOMNodes","_cleanupUnusedNodes","_cacheNodeSize","resetMore","markIndex","itemLen","currentNode","currentData","zIndex","_getTombStone","isTombstone","animation","_i2","_animation","tombstoneNode","tombstoneAnimationsHandler","_i3","_animation2","initialAnchor","ceil","floor","_handleOptions","_events","setScale","_initExtFeatures","_watchTransition","_initDOMObserver","_handleAutoBlur","scale","lastScale","_initSnap","_initScrollbar","_initPullUp","_initPullDown","_initWheel","_initMouseWheel","_initZoom","_initInfinite","me","set","newVal","pointerEvents","pulling","activeElement","blur","MutationObserver","timer","observer","mutations","_shouldNotRefresh","immediateRefresh","deferredRefresh","mutation","config","attributes","childList","subtree","observe","disconnect","_checkDOMUpdate","outsideBoundaries","minScrollX","minScrollY","stopFromTransition","check","destroyed","scrollerRect","newWidth","newHeight","oldWidth","oldHeight","_zoomStart","_zoom","scaled","_zoomEnd","_resize","_transitionEnd","enabled","_onMouseWheel","isWrapperStatic","getComputedStyle","wrapperRect","relativeX","relativeY","_checkWheelAllDisabled","endTime","wrapperOffset","_eventType","button","distX","distY","movingDirectionX","movingDirectionY","directionLocked","_transitionTime","absStartX","absStartY","pointX","pointY","absDistX","absDistY","timestamp","bottom","right","_translate","scrollLeft","documentElement","body","pX","pY","_checkPullDown","_checkClick","flick","momentumX","momentumY","adjustTime","snapSpeed","preventClick","wheelWrapperClass","_offset","_dblclick","dblclickTrigged","lastClickTime","_dblclick$delay","delay","resizeTimeout","_startProbe","probe","pos","getComputedPosition","probeTimer","indicators","_transitionTimingFunction","_options$wheel$rotate","deg","_animate","destX","destY","easingFn","step","destTime","isAnimating","destScale","newScale","startScale","animateTimer","scrollBy","isSilent","_reflow","scrollToElement","offsetX","offsetY","nodeType","wheelItemClass","easeing","roundX","roundY","matrix","split","replace","once","magic","off","apply","count","events","len","eventsCopy","_event","loop","cloneNode","querySelectorAll","pages","stepX","stepY","cx","cy","_checkSnapLoop","initPageX","_loopX","initPageY","_loopY","_goToPage","snapThreshold","threshold","snapThresholdX","snapThresholdY","listenFlick","_children","posX","posY","goToPage","prev","getCurrentPage","wheelDisabledItemClass","currentIndex","cacheIndex","wheelItemsAllDisabled","_options$scrollbar","_options$scrollbar$fa","_options$scrollbar$in","_insertScrollBar","_removeScrollBars","_options$pullDownRefr","_options$pullDownRefr2","_options$pullDownRefr3","finishPullDown","openPullDown","closePullDown","autoPullDownRefresh","_options$pullDownRefr4","_options$pullDownRefr5","_options$pullDownRefr6","pullupWatching","_watchPullUp","_checkToEnd","_options$pullUpLoad$t","finishPullUp","openPullUp","closePullUp","_handleMouseWheelEvent","mouseWheelTimer","mouseWheelEndTimer","firstWheelOpreation","_options$mouseWheel","_options$mouseWheel$s","_options$mouseWheel$i","invert","_options$mouseWheel$e","easeTime","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","detail","needTriggerEnd","_options$zoom","_options$zoom$start","_options$zoom$min","_options$zoom$max","_zoomTo","originX","originY","zoomTo","_offsetToBody","firstFinger","secondFinger","startDistance","_offsetToBody2","_options$zoom2","_options$zoom2$min","_options$zoom2$max","pow","_options$zoom3","_options$zoom3$min","_options$zoom3$max","Version","__WEBPACK_IMPORTED_MODULE_0__range__","range","isLeapYear","getDays","endDay","UNIT_DAY","day","dateAnchor","dateData","yearData","monthData","cascadeMonthData","month","year","date","getFullYear","getMonth","getDate","_vm","_h","$createElement","_c","_self","attrs","directives","rawName","expression","staticClass","_v","color","_t","ref","_l","esExports"],"mappings":"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","file":"vue-awesome-picker.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"VueAwesomePicker\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VueAwesomePicker\"] = factory();\n\telse\n\t\troot[\"VueAwesomePicker\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"VueAwesomePicker\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"VueAwesomePicker\"] = factory();\n\telse\n\t\troot[\"VueAwesomePicker\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"dist/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_better_scroll__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__data_time_js__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__data_date_js__ = __webpack_require__(12);\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar DATA_NORMAL = 'normal';\nvar DATA_CASCADE = 'cascade';\n\nvar TYPE_NORMAL = 'normal';\nvar TYPE_TIME = 'time';\nvar TYPE_DATE = 'date';\n\nvar TEXT_TITLE = '';\nvar TEXT_CONFIRM = '确定';\nvar TEXT_CANCEL = '取消';\n\nvar COLOR_TITLE = '#000000';\nvar COLOR_CONFIRM = '#42b983';\nvar COLOR_CANCEL = '#999999';\n\nvar EVENT_CONFIRM = 'confirm';\nvar EVENT_CANCEL = 'cancel';\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n  name: 'awesome-picker',\n  props: {\n    data: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    anchor: {\n      type: Array,\n      default: function _default() {\n        return [];\n      }\n    },\n    type: {\n      type: String,\n      default: TYPE_NORMAL\n    },\n    textTitle: {\n      type: String,\n      default: TEXT_TITLE\n    },\n    textConfirm: {\n      type: String,\n      default: TEXT_CONFIRM\n    },\n    textCancel: {\n      type: String,\n      default: TEXT_CANCEL\n    },\n    colorTitle: {\n      type: String,\n      default: COLOR_TITLE\n    },\n    colorConfirm: {\n      type: String,\n      default: COLOR_CONFIRM\n    },\n    colorCancel: {\n      type: String,\n      default: COLOR_CANCEL\n    },\n    swipeTime: {\n      type: Number,\n      default: 1800\n    }\n  },\n  data: function data() {\n    return {\n      display: false,\n      dataChange: false,\n      pickerData: this._dataGetter(),\n      pickerAnchor: this._anchorGetter(),\n      wheels: []\n    };\n  },\n\n  watch: {\n    data: function data() {\n      this._setPickerData();\n    }\n  },\n  computed: {\n    proxyData: function proxyData() {\n      return this._dataGetter();\n    },\n    proxyAnchor: function proxyAnchor() {\n      return this._anchorGetter();\n    },\n    dataType: function dataType() {\n      return !Array.isArray(this.proxyData[0]) ? DATA_CASCADE : DATA_NORMAL;\n    }\n  },\n  methods: {\n    _dataGetter: function _dataGetter() {\n      var data = null;\n      switch (this.type) {\n        case TYPE_TIME:\n          data = __WEBPACK_IMPORTED_MODULE_1__data_time_js__[\"a\" /* default */];break;\n        case TYPE_DATE:\n          data = __WEBPACK_IMPORTED_MODULE_2__data_date_js__[\"b\" /* dateData */];break;\n        case TYPE_NORMAL:\n        default:\n          data = this.data;break;\n      }\n      return [].concat(_toConsumableArray(data));\n    },\n    _anchorGetter: function _anchorGetter() {\n      var _this = this;\n\n      var anchor = [];\n      if (this.anchor.length) {\n        anchor = this.anchor;\n      } else {\n        switch (this.type) {\n          case TYPE_DATE:\n            anchor = __WEBPACK_IMPORTED_MODULE_2__data_date_js__[\"a\" /* dateAnchor */];break;\n          default:\n            anchor = this.anchor;break;\n        }\n      }\n\n      anchor = anchor.map(function (item, i) {\n        var index = 0;\n        if (item.index) {\n          index = item.index;\n        } else if (item.value) {\n          index = _this.pickerData && _this.pickerData[i] && _this.pickerData[i].indexOf(item.value) > -1 ? _this.pickerData[i].indexOf(item.value) : 0;\n        } else {\n          index = item;\n        }\n        return index;\n      });\n      return [].concat(_toConsumableArray(anchor));\n    },\n    show: function show() {\n      var _this2 = this;\n\n      this.display = true;\n      if (!this.wheels.length || this.dataChange) {\n        this.dataType === DATA_CASCADE && this._updatePickerData();\n        this.$nextTick(function () {\n          var wheelWrapper = _this2.$refs.wheelWrapper;\n          _this2.pickerData.forEach(function (item, index) {\n            _this2._createWheel(wheelWrapper, index).enable();\n          });\n          _this2._wheelToAnchor(_this2.proxyAnchor);\n\n          _this2.dataChange && _this2._destroyExtraWheels();\n          _this2.dataChange = false;\n        });\n      } else {\n        this.wheels.forEach(function (wheel) {\n          wheel.enable();\n        });\n      }\n    },\n    hide: function hide() {\n      this.wheels.forEach(function (wheel) {\n        wheel.disable();\n      });\n      this.display = false;\n    },\n    _createWheel: function _createWheel(wheelWrapper, i) {\n      var _this3 = this;\n\n      if (!this.wheels[i]) {\n        var wheel = this.wheels[i] = new __WEBPACK_IMPORTED_MODULE_0_better_scroll__[\"a\" /* default */](wheelWrapper.children[i], {\n          wheel: {\n            selectedIndex: 0,\n            rotate: 25\n          },\n          swipeTime: this.swipeTime\n        });\n        wheel.on('scrollEnd', function () {\n          console.log('i', i);\n          _this3._cascadePickerChange(i);\n        });\n      } else {\n        this.wheels[i].refresh();\n      }\n      return this.wheels[i];\n    },\n    _cascadePickerChange: function _cascadePickerChange(i) {\n      if (this.dataType !== DATA_CASCADE) {\n        return;\n      }\n      var newIndex = this._getCurrentValue()[i].index;\n      if (newIndex !== this.pickerAnchor[i]) {\n        this.pickerAnchor.splice(i, 1, newIndex);\n        this._updatePickerData(i + 1);\n      }\n    },\n    _wheelToAnchor: function _wheelToAnchor(data) {\n      this.wheels.forEach(function (wheel, i) {\n        wheel.wheelTo(data[i] || 0);\n      });\n    },\n    _getCurrentValue: function _getCurrentValue() {\n      var _this4 = this;\n\n      var value = [];\n      this.wheels.forEach(function (wheel, i) {\n        var j = wheel.getSelectedIndex();\n        value.push({\n          index: j,\n          value: _this4.pickerData[i][j]\n        });\n      });\n      return value;\n    },\n    _setPickerData: function _setPickerData() {\n      var _this5 = this;\n\n      this.pickerData = this._dataGetter();\n      this.pickerAnchor = this._anchorGetter();\n      if (this.display) {\n        if (this.dataType == DATA_CASCADE) {\n          this._updatePickerData();\n        }\n        this.$nextTick(function () {\n          var wheelWrapper = _this5.$refs.wheelWrapper;\n          _this5.pickerData.forEach(function (item, i) {\n            _this5._createWheel(wheelWrapper, i);\n          });\n          _this5._destroyExtraWheels();\n          _this5._wheelToAnchor(_this5.proxyAnchor);\n        });\n      } else {\n        this.dataChange = true;\n      }\n    },\n    _destroyExtraWheels: function _destroyExtraWheels() {\n      var dataLength = this.pickerData.length;\n      if (dataLength < this.wheels.length) {\n        var extraWheels = this.wheels.splice(dataLength);\n        extraWheels.forEach(function (wheel) {\n          wheel.destroy();\n        });\n      }\n    },\n    _updatePickerData: function _updatePickerData() {\n      var _this6 = this;\n\n      var wheelIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n      var data = [].concat(_toConsumableArray(this.proxyData));\n      var i = 0;\n      wheelIndex = 0;\n      while (data) {\n        if (i >= wheelIndex) {\n          (function () {\n            var wheelData = [];\n            data.forEach(function (item) {\n              wheelData.push(item.value);\n            });\n            _this6.pickerData[i] = wheelData;\n            _this6.pickerAnchor[i] = wheelIndex === 0 ? _this6.pickerAnchor[i] < data.length ? _this6.pickerAnchor[i] || 0 : 0 : _this6._reloadWheel(i, wheelData);\n          })();\n        }\n        data = data.length ? data[this.pickerAnchor[i]].children : null;\n        i++;\n      }\n      this.pickerData = this.pickerData.slice(0, i);\n    },\n    _reloadWheel: function _reloadWheel(index, data) {\n      var _this7 = this;\n\n      var wheelWrapper = this.$refs.wheelWrapper;\n      var scroll = wheelWrapper.children[index].querySelector('.wheel-scroll');\n      var wheel = this.wheels ? this.wheels[index] : false;\n      var dist = 0;\n      if (scroll && wheel) {\n        this.$set(this.pickerData, index, data);\n        this.pickerAnchor[index] = dist;\n        this.$nextTick(function () {\n          wheel = _this7._createWheel(wheelWrapper, index);\n          wheel.wheelTo(dist);\n        });\n      }\n      return dist;\n    },\n    confirm: function confirm() {\n      var isInTransition = this.wheels.some(function (wheel) {\n        return wheel.isInTransition;\n      });\n      if (isInTransition) {\n        return;\n      }\n      var selectedValues = this._getCurrentValue();\n      this.$emit(EVENT_CONFIRM, selectedValues);\n      this.hide();\n    },\n    cancel: function cancel() {\n      this.$emit(EVENT_CANCEL);\n      this.hide();\n    }\n  }\n});\n\n/***/ }),\n/* 1 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (n, m) {\n  var polyfill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var unit = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';\n\n  var arr = [];\n  for (var i = n; i <= m; i++) {\n    var value = (polyfill && i < 10 ? '0' + i : i) + unit;\n    arr.push(value);\n  }\n  return arr;\n});\n\n/***/ }),\n/* 2 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__vue_awesome_picker_vue__ = __webpack_require__(3);\n\nvar picker = {\n  install: function install(Vue) {\n    Vue.component(__WEBPACK_IMPORTED_MODULE_0__vue_awesome_picker_vue__[\"a\" /* default */].name, __WEBPACK_IMPORTED_MODULE_0__vue_awesome_picker_vue__[\"a\" /* default */]);\n  }\n};\nif (typeof window !== 'undefined' && window.Vue) {\n  window.Vue.use(picker);\n}\n/* harmony default export */ __webpack_exports__[\"default\"] = (picker);\n\n/***/ }),\n/* 3 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_script_index_0_vue_awesome_picker_vue__ = __webpack_require__(0);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_13_7_3_vue_loader_lib_template_compiler_index_id_data_v_d86a61f6_hasScoped_true_buble_transforms_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_template_index_0_vue_awesome_picker_vue__ = __webpack_require__(13);\nfunction injectStyle (ssrContext) {\n  __webpack_require__(4)\n}\nvar normalizeComponent = __webpack_require__(9)\n/* script */\n\n\n/* template */\n\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-d86a61f6\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_script_index_0_vue_awesome_picker_vue__[\"a\" /* default */],\n  __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_13_7_3_vue_loader_lib_template_compiler_index_id_data_v_d86a61f6_hasScoped_true_buble_transforms_node_modules_vue_loader_13_7_3_vue_loader_lib_selector_type_template_index_0_vue_awesome_picker_vue__[\"a\" /* default */],\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Component.exports);\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(5);\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar update = __webpack_require__(7)(\"77d5ecd4\", content, true, {});\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nexports = module.exports = __webpack_require__(6)(false);\n// imports\n\n\n// module\nexports.push([module.i, \".fade-enter[data-v-d86a61f6],.fade-leave-to[data-v-d86a61f6]{opacity:0}.fade-enter-active[data-v-d86a61f6],.fade-leave-active[data-v-d86a61f6]{transition:all .3s ease}.slide-enter[data-v-d86a61f6],.slide-leave-to[data-v-d86a61f6]{opacity:.5;transform:translate3d(0,270px,0)}.slide-enter-active[data-v-d86a61f6],.slide-leave-active[data-v-d86a61f6]{transition:all .3s ease}.mask[data-v-d86a61f6]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:rgba(0,0,0,.2)}.picker[data-v-d86a61f6]{position:fixed;left:0;right:0;bottom:0;height:270px;z-index:10000;background:#fff}.picker-title[data-v-d86a61f6]{position:relative;height:44px;color:#333}.picker-title[data-v-d86a61f6]:after{content:\\\"\\\";display:block;border-bottom:1px solid #ebebeb;left:0;right:0;transform:scaleY(.5)}.picker-title span[data-v-d86a61f6]{position:absolute;height:44px;line-height:44px;padding:0 12px;font-size:14px}.picker-title .pt-cancel[data-v-d86a61f6]{left:0;color:#999}.picker-title .pt-submit[data-v-d86a61f6]{right:0;color:#42b983}.picker-title h4[data-v-d86a61f6]{margin:0;font-size:16px;font-weight:400;height:44px;line-height:44px;text-align:center}.picker-panel[data-v-d86a61f6]{position:relative;height:226px;padding:24px 12px;box-sizing:border-box}.picker-panel .picker-mask-bottom[data-v-d86a61f6],.picker-panel .picker-mask-top[data-v-d86a61f6]{position:absolute;left:0;right:0;height:72px;background:#fff;transform:translateZ(0);z-index:1;pointer-events:none}.picker-panel .picker-mask-top[data-v-d86a61f6]{top:24px;background:linear-gradient(180deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.5))}.picker-panel .picker-mask-top[data-v-d86a61f6]:after{content:\\\"\\\";display:block;position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid #ebebeb;transform:scaleY(.5)}.picker-panel .picker-mask-bottom[data-v-d86a61f6]{bottom:24px;background:linear-gradient(0deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.5))}.picker-panel .picker-mask-bottom[data-v-d86a61f6]:before{content:\\\"\\\";display:block;position:absolute;left:0;right:0;top:0;border-bottom:1px solid #ebebeb;transform:scaleY(.5)}.picker-wheel-wrapper[data-v-d86a61f6]{display:flex;align-items:stretch;height:100%}.picker-wheel-wrapper .picker-wheel[data-v-d86a61f6]{flex:1;overflow:hidden}.picker-wheel-wrapper .wheel-scroll[data-v-d86a61f6]{margin-top:72px}.picker-wheel-wrapper .wheel-scroll .wheel-item[data-v-d86a61f6]{height:34px;line-height:34px;font-size:17px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}\", \"\"]);\n\n// exports\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n  Modified by Evan You @yyx990803\n*/\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n  if (!hasDocument) {\n    throw new Error(\n    'vue-style-loader cannot be used in a non-browser environment. ' +\n    \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n  ) }\n}\n\nvar listToStyles = __webpack_require__(8)\n\n/*\ntype StyleObject = {\n  id: number;\n  parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n  css: string;\n  media: string;\n  sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n  [id: number]: {\n    id: number,\n    refs: number,\n    parts: Array<(obj?: StyleObjectPart) => void>\n  }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nmodule.exports = function (parentId, list, _isProduction, _options) {\n  isProduction = _isProduction\n\n  options = _options || {}\n\n  var styles = listToStyles(parentId, list)\n  addStylesToDom(styles)\n\n  return function update (newList) {\n    var mayRemove = []\n    for (var i = 0; i < styles.length; i++) {\n      var item = styles[i]\n      var domStyle = stylesInDom[item.id]\n      domStyle.refs--\n      mayRemove.push(domStyle)\n    }\n    if (newList) {\n      styles = listToStyles(parentId, newList)\n      addStylesToDom(styles)\n    } else {\n      styles = []\n    }\n    for (var i = 0; i < mayRemove.length; i++) {\n      var domStyle = mayRemove[i]\n      if (domStyle.refs === 0) {\n        for (var j = 0; j < domStyle.parts.length; j++) {\n          domStyle.parts[j]()\n        }\n        delete stylesInDom[domStyle.id]\n      }\n    }\n  }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n  for (var i = 0; i < styles.length; i++) {\n    var item = styles[i]\n    var domStyle = stylesInDom[item.id]\n    if (domStyle) {\n      domStyle.refs++\n      for (var j = 0; j < domStyle.parts.length; j++) {\n        domStyle.parts[j](item.parts[j])\n      }\n      for (; j < item.parts.length; j++) {\n        domStyle.parts.push(addStyle(item.parts[j]))\n      }\n      if (domStyle.parts.length > item.parts.length) {\n        domStyle.parts.length = item.parts.length\n      }\n    } else {\n      var parts = []\n      for (var j = 0; j < item.parts.length; j++) {\n        parts.push(addStyle(item.parts[j]))\n      }\n      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n    }\n  }\n}\n\nfunction createStyleElement () {\n  var styleElement = document.createElement('style')\n  styleElement.type = 'text/css'\n  head.appendChild(styleElement)\n  return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n  var update, remove\n  var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n  if (styleElement) {\n    if (isProduction) {\n      // has SSR styles and in production mode.\n      // simply do nothing.\n      return noop\n    } else {\n      // has SSR styles but in dev mode.\n      // for some reason Chrome can't handle source map in server-rendered\n      // style tags - source maps in <style> only works if the style tag is\n      // created and inserted dynamically. So we remove the server rendered\n      // styles and inject new ones.\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  if (isOldIE) {\n    // use singleton mode for IE9.\n    var styleIndex = singletonCounter++\n    styleElement = singletonElement || (singletonElement = createStyleElement())\n    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n  } else {\n    // use multi-style-tag mode in all other cases\n    styleElement = createStyleElement()\n    update = applyToTag.bind(null, styleElement)\n    remove = function () {\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  update(obj)\n\n  return function updateStyle (newObj /* StyleObjectPart */) {\n    if (newObj) {\n      if (newObj.css === obj.css &&\n          newObj.media === obj.media &&\n          newObj.sourceMap === obj.sourceMap) {\n        return\n      }\n      update(obj = newObj)\n    } else {\n      remove()\n    }\n  }\n}\n\nvar replaceText = (function () {\n  var textStore = []\n\n  return function (index, replacement) {\n    textStore[index] = replacement\n    return textStore.filter(Boolean).join('\\n')\n  }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n  var css = remove ? '' : obj.css\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = replaceText(index, css)\n  } else {\n    var cssNode = document.createTextNode(css)\n    var childNodes = styleElement.childNodes\n    if (childNodes[index]) styleElement.removeChild(childNodes[index])\n    if (childNodes.length) {\n      styleElement.insertBefore(cssNode, childNodes[index])\n    } else {\n      styleElement.appendChild(cssNode)\n    }\n  }\n}\n\nfunction applyToTag (styleElement, obj) {\n  var css = obj.css\n  var media = obj.media\n  var sourceMap = obj.sourceMap\n\n  if (media) {\n    styleElement.setAttribute('media', media)\n  }\n  if (options.ssrId) {\n    styleElement.setAttribute(ssrIdKey, obj.id)\n  }\n\n  if (sourceMap) {\n    // https://developer.chrome.com/devtools/docs/javascript-debugging\n    // this makes source maps inside style tags work properly in Chrome\n    css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n    // http://stackoverflow.com/a/26603875\n    css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n  }\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild)\n    }\n    styleElement.appendChild(document.createTextNode(css))\n  }\n}\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nmodule.exports = function listToStyles (parentId, list) {\n  var styles = []\n  var newStyles = {}\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i]\n    var id = item[0]\n    var css = item[1]\n    var media = item[2]\n    var sourceMap = item[3]\n    var part = {\n      id: parentId + ':' + i,\n      css: css,\n      media: media,\n      sourceMap: sourceMap\n    }\n    if (!newStyles[id]) {\n      styles.push(newStyles[id] = { id: id, parts: [part] })\n    } else {\n      newStyles[id].parts.push(part)\n    }\n  }\n  return styles\n}\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file.\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nmodule.exports = function normalizeComponent (\n  rawScriptExports,\n  compiledTemplate,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier /* server only */\n) {\n  var esModule\n  var scriptExports = rawScriptExports = rawScriptExports || {}\n\n  // ES6 modules interop\n  var type = typeof rawScriptExports.default\n  if (type === 'object' || type === 'function') {\n    esModule = rawScriptExports\n    scriptExports = rawScriptExports.default\n  }\n\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (compiledTemplate) {\n    options.render = compiledTemplate.render\n    options.staticRenderFns = compiledTemplate.staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = injectStyles\n  }\n\n  if (hook) {\n    var functional = options.functional\n    var existing = functional\n      ? options.render\n      : options.beforeCreate\n\n    if (!functional) {\n      // inject component registration as beforeCreate hook\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    } else {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return existing(h, context)\n      }\n    }\n  }\n\n  return {\n    esModule: esModule,\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/*!\n * better-normal-scroll v1.15.1\n * (c) 2016-2019 ustbhuangyi\n * Released under the MIT License.\n */\n// As of V8 6.6, depending on the size of the array, this is anywhere\n// between 1.5-10x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++) {\n    list[index] = list[index + 1];\n  }\n\n  list.pop();\n}\n\nvar slicedToArray = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if (Symbol.iterator in Object(arr)) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\nfunction eventMixin(BScroll) {\n  BScroll.prototype.on = function (type, fn) {\n    var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n    if (!this._events[type]) {\n      this._events[type] = [];\n    }\n\n    this._events[type].push([fn, context]);\n  };\n\n  BScroll.prototype.once = function (type, fn) {\n    var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n    function magic() {\n      this.off(type, magic);\n\n      fn.apply(context, arguments);\n    }\n    // To expose the corresponding function method in order to execute the off method\n    magic.fn = fn;\n\n    this.on(type, magic);\n  };\n\n  BScroll.prototype.off = function (type, fn) {\n    var _events = this._events[type];\n    if (!_events) {\n      return;\n    }\n\n    var count = _events.length;\n    while (count--) {\n      if (_events[count][0] === fn || _events[count][0] && _events[count][0].fn === fn) {\n        spliceOne(_events, count);\n      }\n    }\n  };\n\n  BScroll.prototype.trigger = function (type) {\n    var events = this._events[type];\n    if (!events) {\n      return;\n    }\n\n    var len = events.length;\n    var eventsCopy = [].concat(toConsumableArray(events));\n    for (var i = 0; i < len; i++) {\n      var event = eventsCopy[i];\n\n      var _event = slicedToArray(event, 2),\n          fn = _event[0],\n          context = _event[1];\n\n      if (fn) {\n        fn.apply(context, [].slice.call(arguments, 1));\n      }\n    }\n  };\n}\n\n// ssr support\nvar inBrowser = typeof window !== 'undefined';\nvar ua = inBrowser && navigator.userAgent.toLowerCase();\nvar isWeChatDevTools = ua && /wechatdevtools/.test(ua);\nvar isAndroid = ua && ua.indexOf('android') > 0;\n\nfunction getNow() {\n  return window.performance && window.performance.now ? window.performance.now() + window.performance.timing.navigationStart : +new Date();\n}\n\nfunction extend(target) {\n  for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    rest[_key - 1] = arguments[_key];\n  }\n\n  for (var i = 0; i < rest.length; i++) {\n    var source = rest[i];\n    for (var key in source) {\n      target[key] = source[key];\n    }\n  }\n  return target;\n}\n\nfunction isUndef(v) {\n  return v === undefined || v === null;\n}\n\nfunction getDistance(x, y) {\n  return Math.sqrt(x * x + y * y);\n}\n\nvar elementStyle = inBrowser && document.createElement('div').style;\n\nvar vendor = function () {\n  if (!inBrowser) {\n    return false;\n  }\n  // first pick up standard to fix #743\n  var transformNames = {\n    standard: 'transform',\n    webkit: 'webkitTransform',\n    Moz: 'MozTransform',\n    O: 'OTransform',\n    ms: 'msTransform'\n  };\n\n  for (var key in transformNames) {\n    if (elementStyle[transformNames[key]] !== undefined) {\n      return key;\n    }\n  }\n\n  return false;\n}();\n\nfunction prefixStyle(style) {\n  if (vendor === false) {\n    return false;\n  }\n\n  if (vendor === 'standard') {\n    if (style === 'transitionEnd') {\n      return 'transitionend';\n    }\n    return style;\n  }\n\n  return vendor + style.charAt(0).toUpperCase() + style.substr(1);\n}\n\nfunction addEvent(el, type, fn, capture) {\n  el.addEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction removeEvent(el, type, fn, capture) {\n  el.removeEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction offset(el) {\n  var left = 0;\n  var top = 0;\n\n  while (el) {\n    left -= el.offsetLeft;\n    top -= el.offsetTop;\n    el = el.offsetParent;\n  }\n\n  return {\n    left: left,\n    top: top\n  };\n}\n\nfunction offsetToBody(el) {\n  var rect = el.getBoundingClientRect();\n\n  return {\n    left: -(rect.left + window.pageXOffset),\n    top: -(rect.top + window.pageYOffset)\n  };\n}\n\nvar cssVendor = vendor && vendor !== 'standard' ? '-' + vendor.toLowerCase() + '-' : '';\n\nvar transform = prefixStyle('transform');\nvar transition = prefixStyle('transition');\n\nvar hasPerspective = inBrowser && prefixStyle('perspective') in elementStyle;\n// fix issue #361\nvar hasTouch = inBrowser && ('ontouchstart' in window || isWeChatDevTools);\nvar hasTransform = transform !== false;\nvar hasTransition = inBrowser && transition in elementStyle;\n\nvar style = {\n  transform: transform,\n  transition: transition,\n  transitionTimingFunction: prefixStyle('transitionTimingFunction'),\n  transitionDuration: prefixStyle('transitionDuration'),\n  transitionDelay: prefixStyle('transitionDelay'),\n  transformOrigin: prefixStyle('transformOrigin'),\n  transitionEnd: prefixStyle('transitionEnd')\n};\n\nvar TOUCH_EVENT = 1;\nvar MOUSE_EVENT = 2;\n\nvar eventType = {\n  touchstart: TOUCH_EVENT,\n  touchmove: TOUCH_EVENT,\n  touchend: TOUCH_EVENT,\n\n  mousedown: MOUSE_EVENT,\n  mousemove: MOUSE_EVENT,\n  mouseup: MOUSE_EVENT\n};\n\nfunction getRect(el) {\n  if (el instanceof window.SVGElement) {\n    var rect = el.getBoundingClientRect();\n    return {\n      top: rect.top,\n      left: rect.left,\n      width: rect.width,\n      height: rect.height\n    };\n  } else {\n    return {\n      top: el.offsetTop,\n      left: el.offsetLeft,\n      width: el.offsetWidth,\n      height: el.offsetHeight\n    };\n  }\n}\n\nfunction preventDefaultException(el, exceptions) {\n  for (var i in exceptions) {\n    if (exceptions[i].test(el[i])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction tap(e, eventName) {\n  var ev = document.createEvent('Event');\n  ev.initEvent(eventName, true, true);\n  ev.pageX = e.pageX;\n  ev.pageY = e.pageY;\n  e.target.dispatchEvent(ev);\n}\n\nfunction click(e) {\n  var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'click';\n\n  var eventSource = void 0;\n  if (e.type === 'mouseup' || e.type === 'mousecancel') {\n    eventSource = e;\n  } else if (e.type === 'touchend' || e.type === 'touchcancel') {\n    eventSource = e.changedTouches[0];\n  }\n  var posSrc = {};\n  if (eventSource) {\n    posSrc.screenX = eventSource.screenX || 0;\n    posSrc.screenY = eventSource.screenY || 0;\n    posSrc.clientX = eventSource.clientX || 0;\n    posSrc.clientY = eventSource.clientY || 0;\n  }\n  var ev = void 0;\n  var bubbles = true;\n  var cancelable = true;\n  if (typeof MouseEvent !== 'undefined') {\n    try {\n      ev = new MouseEvent(event, extend({\n        bubbles: bubbles,\n        cancelable: cancelable\n      }, posSrc));\n    } catch (e) {\n      createEvent();\n    }\n  } else {\n    createEvent();\n  }\n\n  function createEvent() {\n    ev = document.createEvent('Event');\n    ev.initEvent(event, bubbles, cancelable);\n    extend(ev, posSrc);\n  }\n\n  // forwardedTouchEvent set to true in case of the conflict with fastclick\n  ev.forwardedTouchEvent = true;\n  ev._constructed = true;\n  e.target.dispatchEvent(ev);\n}\n\nfunction dblclick(e) {\n  click(e, 'dblclick');\n}\n\nfunction prepend(el, target) {\n  if (target.firstChild) {\n    before(el, target.firstChild);\n  } else {\n    target.appendChild(el);\n  }\n}\n\nfunction before(el, target) {\n  target.parentNode.insertBefore(el, target);\n}\n\nfunction removeChild(el, child) {\n  el.removeChild(child);\n}\n\nvar DEFAULT_OPTIONS = {\n  startX: 0,\n  startY: 0,\n  scrollX: false,\n  scrollY: true,\n  freeScroll: false,\n  directionLockThreshold: 5,\n  eventPassthrough: '',\n  click: false,\n  tap: false,\n  /**\n   * support any side\n   * bounce: {\n   *   top: true,\n   *   bottom: true,\n   *   left: true,\n   *   right: true\n   * }\n   */\n  bounce: true,\n  bounceTime: 800,\n  momentum: true,\n  momentumLimitTime: 300,\n  momentumLimitDistance: 15,\n  swipeTime: 2500,\n  swipeBounceTime: 500,\n  deceleration: 0.0015,\n  flickLimitTime: 200,\n  flickLimitDistance: 100,\n  resizePolling: 60,\n  probeType: 0,\n  preventDefault: true,\n  preventDefaultException: {\n    tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/\n  },\n  HWCompositing: true,\n  useTransition: true,\n  useTransform: true,\n  bindToWrapper: false,\n  disableMouse: hasTouch,\n  disableTouch: !hasTouch,\n  observeDOM: true,\n  autoBlur: true,\n  /**\n   * for picker\n   * wheel: {\n   *   selectedIndex: 0,\n   *   rotate: 25,\n   *   adjustTime: 400\n   *   wheelWrapperClass: 'wheel-scroll',\n   *   wheelItemClass: 'wheel-item'\n   * }\n   */\n  wheel: false,\n  /**\n   * for slide\n   * snap: {\n   *   loop: false,\n   *   el: domEl,\n   *   threshold: 0.1,\n   *   stepX: 100,\n   *   stepY: 100,\n   *   speed: 400,\n   *   easing: {\n   *     style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n   *     fn: function (t) {\n   *       return t * (2 - t)\n   *     }\n   *   }\n   *   listenFlick: true\n   * }\n   */\n  snap: false,\n  /**\n   * for scrollbar\n   * scrollbar: {\n   *   fade: true,\n   *   interactive: false\n   * }\n   */\n  scrollbar: false,\n  /**\n   * for pull down and refresh\n   * pullDownRefresh: {\n   *   threshold: 50,\n   *   stop: 20\n   * }\n   */\n  pullDownRefresh: false,\n  /**\n   * for pull up and load\n   * pullUpLoad: {\n   *   threshold: 50\n   * }\n   */\n  pullUpLoad: false,\n  /**\n   * for mouse wheel\n   * mouseWheel: {\n   *   speed: 20,\n   *   invert: false,\n   *   easeTime: 300\n   * }\n   */\n  mouseWheel: false,\n  stopPropagation: false,\n  /**\n   * for zoom\n   * zoom: {\n   *   start: 1,\n   *   min: 1,\n   *   max: 4\n   * }\n   */\n  zoom: false,\n  /**\n   * for infinity\n   * infinity: {\n   *   render(item, div) {\n   *   },\n   *   createTombstone() {\n   *   },\n   *   fetch(count) {\n   *   }\n   * }\n   */\n  infinity: false,\n  /**\n   * for double click\n   * dblclick: {\n   *   delay: 300\n   * }\n   */\n  dblclick: false\n};\n\nfunction initMixin(BScroll) {\n  BScroll.prototype._init = function (options) {\n    this._handleOptions(options);\n\n    // init private custom events\n    this._events = {};\n\n    this.x = 0;\n    this.y = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n\n    this.setScale(1);\n\n    this._addDOMEvents();\n\n    this._initExtFeatures();\n\n    this._watchTransition();\n\n    if (this.options.observeDOM) {\n      this._initDOMObserver();\n    }\n\n    if (this.options.autoBlur) {\n      this._handleAutoBlur();\n    }\n\n    this.refresh();\n\n    if (!this.options.snap) {\n      this.scrollTo(this.options.startX, this.options.startY);\n    }\n\n    this.enable();\n  };\n\n  BScroll.prototype.setScale = function (scale) {\n    this.lastScale = isUndef(this.scale) ? scale : this.scale;\n    this.scale = scale;\n  };\n\n  BScroll.prototype._handleOptions = function (options) {\n    this.options = extend({}, DEFAULT_OPTIONS, options);\n\n    this.translateZ = this.options.HWCompositing && hasPerspective ? ' translateZ(0)' : '';\n\n    this.options.useTransition = this.options.useTransition && hasTransition;\n    this.options.useTransform = this.options.useTransform && hasTransform;\n\n    this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;\n\n    // If you want eventPassthrough I have to lock one of the axes\n    this.options.scrollX = this.options.eventPassthrough === 'horizontal' ? false : this.options.scrollX;\n    this.options.scrollY = this.options.eventPassthrough === 'vertical' ? false : this.options.scrollY;\n\n    // With eventPassthrough we also need lockDirection mechanism\n    this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n    this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n\n    if (this.options.tap === true) {\n      this.options.tap = 'tap';\n    }\n  };\n\n  BScroll.prototype._addDOMEvents = function () {\n    var eventOperation = addEvent;\n    this._handleDOMEvents(eventOperation);\n  };\n\n  BScroll.prototype._removeDOMEvents = function () {\n    var eventOperation = removeEvent;\n    this._handleDOMEvents(eventOperation);\n  };\n\n  BScroll.prototype._handleDOMEvents = function (eventOperation) {\n    var target = this.options.bindToWrapper ? this.wrapper : window;\n    eventOperation(window, 'orientationchange', this);\n    eventOperation(window, 'resize', this);\n\n    if (this.options.click) {\n      eventOperation(this.wrapper, 'click', this, true);\n    }\n\n    if (!this.options.disableMouse) {\n      eventOperation(this.wrapper, 'mousedown', this);\n      eventOperation(target, 'mousemove', this);\n      eventOperation(target, 'mousecancel', this);\n      eventOperation(target, 'mouseup', this);\n    }\n\n    if (hasTouch && !this.options.disableTouch) {\n      eventOperation(this.wrapper, 'touchstart', this);\n      eventOperation(target, 'touchmove', this);\n      eventOperation(target, 'touchcancel', this);\n      eventOperation(target, 'touchend', this);\n    }\n\n    eventOperation(this.scroller, style.transitionEnd, this);\n  };\n\n  BScroll.prototype._initExtFeatures = function () {\n    if (this.options.snap) {\n      this._initSnap();\n    }\n    if (this.options.scrollbar) {\n      this._initScrollbar();\n    }\n    if (this.options.pullUpLoad) {\n      this._initPullUp();\n    }\n    if (this.options.pullDownRefresh) {\n      this._initPullDown();\n    }\n    if (this.options.wheel) {\n      this._initWheel();\n    }\n    if (this.options.mouseWheel) {\n      this._initMouseWheel();\n    }\n    if (this.options.zoom) {\n      this._initZoom();\n    }\n    if (this.options.infinity) {\n      this._initInfinite();\n    }\n  };\n\n  BScroll.prototype._watchTransition = function () {\n    if (typeof Object.defineProperty !== 'function') {\n      return;\n    }\n    var me = this;\n    var isInTransition = false;\n    var key = this.options.useTransition ? 'isInTransition' : 'isAnimating';\n    Object.defineProperty(this, key, {\n      get: function get() {\n        return isInTransition;\n      },\n      set: function set(newVal) {\n        isInTransition = newVal;\n        // fix issue #359\n        var el = me.scroller.children.length ? me.scroller.children : [me.scroller];\n        var pointerEvents = isInTransition && !me.pulling ? 'none' : 'auto';\n        for (var i = 0; i < el.length; i++) {\n          el[i].style.pointerEvents = pointerEvents;\n        }\n      }\n    });\n  };\n\n  BScroll.prototype._handleAutoBlur = function () {\n    this.on('scrollStart', function () {\n      var activeElement = document.activeElement;\n      if (activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA')) {\n        activeElement.blur();\n      }\n    });\n  };\n\n  BScroll.prototype._initDOMObserver = function () {\n    var _this = this;\n\n    if (typeof MutationObserver !== 'undefined') {\n      var timer = void 0;\n      var observer = new MutationObserver(function (mutations) {\n        // don't do any refresh during the transition, or outside of the boundaries\n        if (_this._shouldNotRefresh()) {\n          return;\n        }\n        var immediateRefresh = false;\n        var deferredRefresh = false;\n        for (var i = 0; i < mutations.length; i++) {\n          var mutation = mutations[i];\n          if (mutation.type !== 'attributes') {\n            immediateRefresh = true;\n            break;\n          } else {\n            if (mutation.target !== _this.scroller) {\n              deferredRefresh = true;\n              break;\n            }\n          }\n        }\n        if (immediateRefresh) {\n          _this.refresh();\n        } else if (deferredRefresh) {\n          // attributes changes too often\n          clearTimeout(timer);\n          timer = setTimeout(function () {\n            if (!_this._shouldNotRefresh()) {\n              _this.refresh();\n            }\n          }, 60);\n        }\n      });\n      var config = {\n        attributes: true,\n        childList: true,\n        subtree: true\n      };\n      observer.observe(this.scroller, config);\n\n      this.on('destroy', function () {\n        observer.disconnect();\n      });\n    } else {\n      this._checkDOMUpdate();\n    }\n  };\n\n  BScroll.prototype._shouldNotRefresh = function () {\n    var outsideBoundaries = this.x > this.minScrollX || this.x < this.maxScrollX || this.y > this.minScrollY || this.y < this.maxScrollY;\n\n    return this.isInTransition || this.stopFromTransition || outsideBoundaries;\n  };\n\n  BScroll.prototype._checkDOMUpdate = function () {\n    var scrollerRect = getRect(this.scroller);\n    var oldWidth = scrollerRect.width;\n    var oldHeight = scrollerRect.height;\n\n    function check() {\n      if (this.destroyed) {\n        return;\n      }\n      scrollerRect = getRect(this.scroller);\n      var newWidth = scrollerRect.width;\n      var newHeight = scrollerRect.height;\n\n      if (oldWidth !== newWidth || oldHeight !== newHeight) {\n        this.refresh();\n      }\n      oldWidth = newWidth;\n      oldHeight = newHeight;\n\n      next.call(this);\n    }\n\n    function next() {\n      var _this2 = this;\n\n      setTimeout(function () {\n        check.call(_this2);\n      }, 1000);\n    }\n\n    next.call(this);\n  };\n\n  BScroll.prototype.handleEvent = function (e) {\n    switch (e.type) {\n      case 'touchstart':\n      case 'mousedown':\n        this._start(e);\n        if (this.options.zoom && e.touches && e.touches.length > 1) {\n          this._zoomStart(e);\n        }\n        break;\n      case 'touchmove':\n      case 'mousemove':\n        if (this.options.zoom && e.touches && e.touches.length > 1) {\n          this._zoom(e);\n        } else {\n          this._move(e);\n        }\n        break;\n      case 'touchend':\n      case 'mouseup':\n      case 'touchcancel':\n      case 'mousecancel':\n        if (this.scaled) {\n          this._zoomEnd(e);\n        } else {\n          this._end(e);\n        }\n        break;\n      case 'orientationchange':\n      case 'resize':\n        this._resize();\n        break;\n      case 'transitionend':\n      case 'webkitTransitionEnd':\n      case 'oTransitionEnd':\n      case 'MSTransitionEnd':\n        this._transitionEnd(e);\n        break;\n      case 'click':\n        if (this.enabled && !e._constructed) {\n          if (!preventDefaultException(e.target, this.options.preventDefaultException)) {\n            e.preventDefault();\n            e.stopPropagation();\n          }\n        }\n        break;\n      case 'wheel':\n      case 'DOMMouseScroll':\n      case 'mousewheel':\n        this._onMouseWheel(e);\n        break;\n    }\n  };\n\n  BScroll.prototype.refresh = function () {\n    var isWrapperStatic = window.getComputedStyle(this.wrapper, null).position === 'static';\n    var wrapperRect = getRect(this.wrapper);\n    this.wrapperWidth = wrapperRect.width;\n    this.wrapperHeight = wrapperRect.height;\n\n    var scrollerRect = getRect(this.scroller);\n    this.scrollerWidth = Math.round(scrollerRect.width * this.scale);\n    this.scrollerHeight = Math.round(scrollerRect.height * this.scale);\n\n    this.relativeX = scrollerRect.left;\n    this.relativeY = scrollerRect.top;\n\n    if (isWrapperStatic) {\n      this.relativeX -= wrapperRect.left;\n      this.relativeY -= wrapperRect.top;\n    }\n\n    this.minScrollX = 0;\n    this.minScrollY = 0;\n\n    var wheel = this.options.wheel;\n    if (wheel) {\n      this.items = this.scroller.children;\n      // check whether there are all disable items or not when refresh\n      this._checkWheelAllDisabled();\n      this.options.itemHeight = this.itemHeight = this.items.length ? this.scrollerHeight / this.items.length : 0;\n      if (this.selectedIndex === undefined) {\n        this.selectedIndex = wheel.selectedIndex || 0;\n      }\n      this.options.startY = -this.selectedIndex * this.itemHeight;\n\n      this.maxScrollX = 0;\n      this.maxScrollY = -this.itemHeight * (this.items.length - 1);\n    } else {\n      this.maxScrollX = this.wrapperWidth - this.scrollerWidth;\n      if (!this.options.infinity) {\n        this.maxScrollY = this.wrapperHeight - this.scrollerHeight;\n      }\n      if (this.maxScrollX < 0) {\n        this.maxScrollX -= this.relativeX;\n        this.minScrollX = -this.relativeX;\n      } else if (this.scale > 1) {\n        this.maxScrollX = this.maxScrollX / 2 - this.relativeX;\n        this.minScrollX = this.maxScrollX;\n      }\n      if (this.maxScrollY < 0) {\n        this.maxScrollY -= this.relativeY;\n        this.minScrollY = -this.relativeY;\n      } else if (this.scale > 1) {\n        this.maxScrollY = this.maxScrollY / 2 - this.relativeY;\n        this.minScrollY = this.maxScrollY;\n      }\n    }\n\n    this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < this.minScrollX;\n    this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < this.minScrollY;\n\n    if (!this.hasHorizontalScroll) {\n      this.maxScrollX = this.minScrollX;\n      this.scrollerWidth = this.wrapperWidth;\n    }\n\n    if (!this.hasVerticalScroll) {\n      this.maxScrollY = this.minScrollY;\n      this.scrollerHeight = this.wrapperHeight;\n    }\n\n    this.endTime = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n    this.wrapperOffset = offset(this.wrapper);\n\n    this.trigger('refresh');\n\n    !this.scaled && this.resetPosition();\n  };\n\n  BScroll.prototype.enable = function () {\n    this.enabled = true;\n  };\n\n  BScroll.prototype.disable = function () {\n    this.enabled = false;\n  };\n}\n\nvar ease = {\n  // easeOutQuint\n  swipe: {\n    style: 'cubic-bezier(0.23, 1, 0.32, 1)',\n    fn: function fn(t) {\n      return 1 + --t * t * t * t * t;\n    }\n  },\n  // easeOutQuard\n  swipeBounce: {\n    style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n    fn: function fn(t) {\n      return t * (2 - t);\n    }\n  },\n  // easeOutQuart\n  bounce: {\n    style: 'cubic-bezier(0.165, 0.84, 0.44, 1)',\n    fn: function fn(t) {\n      return 1 - --t * t * t * t;\n    }\n  }\n};\n\nfunction momentum(current, start, time, lowerMargin, upperMargin, wrapperSize, options, scroll) {\n  var distance = current - start;\n  var speed = Math.abs(distance) / time;\n\n  var deceleration = options.deceleration,\n      itemHeight = options.itemHeight,\n      swipeBounceTime = options.swipeBounceTime,\n      wheel = options.wheel,\n      swipeTime = options.swipeTime;\n\n  var duration = swipeTime;\n  var rate = wheel ? 4 : 15;\n\n  var destination = current + speed / deceleration * (distance < 0 ? -1 : 1);\n\n  if (wheel && itemHeight) {\n    destination = scroll._findNearestValidWheel(destination).y;\n  }\n\n  if (destination < lowerMargin) {\n    destination = wrapperSize ? Math.max(lowerMargin - wrapperSize / 4, lowerMargin - wrapperSize / rate * speed) : lowerMargin;\n    duration = swipeBounceTime;\n  } else if (destination > upperMargin) {\n    destination = wrapperSize ? Math.min(upperMargin + wrapperSize / 4, upperMargin + wrapperSize / rate * speed) : upperMargin;\n    duration = swipeBounceTime;\n  }\n\n  return {\n    destination: Math.round(destination),\n    duration: duration\n  };\n}\n\nvar DEFAULT_INTERVAL = 100 / 60;\n\nfunction noop() {}\n\nvar requestAnimationFrame = function () {\n  if (!inBrowser) {\n    /* istanbul ignore if */\n    return noop;\n  }\n  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||\n  // if all else fails, use setTimeout\n  function (callback) {\n    return window.setTimeout(callback, (callback.interval || DEFAULT_INTERVAL) / 2); // make interval as precise as possible.\n  };\n}();\n\nvar cancelAnimationFrame = function () {\n  if (!inBrowser) {\n    /* istanbul ignore if */\n    return noop;\n  }\n  return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (id) {\n    window.clearTimeout(id);\n  };\n}();\n\nvar DIRECTION_UP = 1;\nvar DIRECTION_DOWN = -1;\nvar DIRECTION_LEFT = 1;\nvar DIRECTION_RIGHT = -1;\n\nvar PROBE_DEBOUNCE = 1;\n\nvar PROBE_REALTIME = 3;\n\nfunction warn(msg) {\n  console.error('[BScroll warn]: ' + msg);\n}\n\nfunction assert(condition, msg) {\n  if (!condition) {\n    throw new Error('[BScroll] ' + msg);\n  }\n}\n\nfunction coreMixin(BScroll) {\n  BScroll.prototype._start = function (e) {\n    var _eventType = eventType[e.type];\n    if (_eventType !== TOUCH_EVENT) {\n      if (e.button !== 0) {\n        return;\n      }\n    }\n    if (!this.enabled || this.destroyed || this.initiated && this.initiated !== _eventType) {\n      return;\n    }\n    this.initiated = _eventType;\n\n    if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.moved = false;\n    this.distX = 0;\n    this.distY = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n    this.movingDirectionX = 0;\n    this.movingDirectionY = 0;\n    this.directionLocked = 0;\n\n    this._transitionTime();\n    this.startTime = getNow();\n\n    if (this.options.wheel) {\n      this.target = e.target;\n    }\n\n    this.stop();\n\n    var point = e.touches ? e.touches[0] : e;\n\n    this.startX = this.x;\n    this.startY = this.y;\n    this.absStartX = this.x;\n    this.absStartY = this.y;\n    this.pointX = point.pageX;\n    this.pointY = point.pageY;\n\n    this.trigger('beforeScrollStart');\n  };\n\n  BScroll.prototype._move = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    var point = e.touches ? e.touches[0] : e;\n    var deltaX = point.pageX - this.pointX;\n    var deltaY = point.pageY - this.pointY;\n\n    this.pointX = point.pageX;\n    this.pointY = point.pageY;\n\n    this.distX += deltaX;\n    this.distY += deltaY;\n\n    var absDistX = Math.abs(this.distX);\n    var absDistY = Math.abs(this.distY);\n\n    var timestamp = getNow();\n\n    // We need to move at least momentumLimitDistance pixels for the scrolling to initiate\n    if (timestamp - this.endTime > this.options.momentumLimitTime && !this.moved && absDistY < this.options.momentumLimitDistance && absDistX < this.options.momentumLimitDistance) {\n      return;\n    }\n\n    // If you are scrolling in one direction lock the other\n    if (!this.directionLocked && !this.options.freeScroll) {\n      if (absDistX > absDistY + this.options.directionLockThreshold) {\n        this.directionLocked = 'h'; // lock horizontally\n      } else if (absDistY >= absDistX + this.options.directionLockThreshold) {\n        this.directionLocked = 'v'; // lock vertically\n      } else {\n        this.directionLocked = 'n'; // no lock\n      }\n    }\n\n    if (this.directionLocked === 'h') {\n      if (this.options.eventPassthrough === 'vertical') {\n        e.preventDefault();\n      } else if (this.options.eventPassthrough === 'horizontal') {\n        this.initiated = false;\n        return;\n      }\n      deltaY = 0;\n    } else if (this.directionLocked === 'v') {\n      if (this.options.eventPassthrough === 'horizontal') {\n        e.preventDefault();\n      } else if (this.options.eventPassthrough === 'vertical') {\n        this.initiated = false;\n        return;\n      }\n      deltaX = 0;\n    }\n\n    deltaX = this.hasHorizontalScroll ? deltaX : 0;\n    deltaY = this.hasVerticalScroll ? deltaY : 0;\n    this.movingDirectionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n    this.movingDirectionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n    var newX = this.x + deltaX;\n    var newY = this.y + deltaY;\n\n    var top = false;\n    var bottom = false;\n    var left = false;\n    var right = false;\n    // Slow down or stop if outside of the boundaries\n    var bounce = this.options.bounce;\n    if (bounce !== false) {\n      top = bounce.top === undefined ? true : bounce.top;\n      bottom = bounce.bottom === undefined ? true : bounce.bottom;\n      left = bounce.left === undefined ? true : bounce.left;\n      right = bounce.right === undefined ? true : bounce.right;\n    }\n    if (newX > this.minScrollX || newX < this.maxScrollX) {\n      if (newX > this.minScrollX && left || newX < this.maxScrollX && right) {\n        newX = this.x + deltaX / 3;\n      } else {\n        newX = newX > this.minScrollX ? this.minScrollX : this.maxScrollX;\n      }\n    }\n    if (newY > this.minScrollY || newY < this.maxScrollY) {\n      if (newY > this.minScrollY && top || newY < this.maxScrollY && bottom) {\n        newY = this.y + deltaY / 3;\n      } else {\n        newY = newY > this.minScrollY ? this.minScrollY : this.maxScrollY;\n      }\n    }\n\n    if (!this.moved) {\n      this.moved = true;\n      this.trigger('scrollStart');\n    }\n\n    this._translate(newX, newY);\n\n    if (timestamp - this.startTime > this.options.momentumLimitTime) {\n      this.startTime = timestamp;\n      this.startX = this.x;\n      this.startY = this.y;\n\n      if (this.options.probeType === PROBE_DEBOUNCE) {\n        this.trigger('scroll', {\n          x: this.x,\n          y: this.y\n        });\n      }\n    }\n\n    if (this.options.probeType > PROBE_DEBOUNCE) {\n      this.trigger('scroll', {\n        x: this.x,\n        y: this.y\n      });\n    }\n\n    var scrollLeft = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft;\n    var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;\n\n    var pX = this.pointX - scrollLeft;\n    var pY = this.pointY - scrollTop;\n\n    if (pX > document.documentElement.clientWidth - this.options.momentumLimitDistance || pX < this.options.momentumLimitDistance || pY < this.options.momentumLimitDistance || pY > document.documentElement.clientHeight - this.options.momentumLimitDistance) {\n      this._end(e);\n    }\n  };\n\n  BScroll.prototype._end = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n    this.initiated = false;\n\n    if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.trigger('touchEnd', {\n      x: this.x,\n      y: this.y\n    });\n\n    this.isInTransition = false;\n\n    // ensures that the last position is rounded\n    var newX = Math.round(this.x);\n    var newY = Math.round(this.y);\n\n    var deltaX = newX - this.absStartX;\n    var deltaY = newY - this.absStartY;\n    this.directionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n    this.directionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n    // if configure pull down refresh, check it first\n    if (this.options.pullDownRefresh && this._checkPullDown()) {\n      return;\n    }\n\n    // check if it is a click operation\n    if (this._checkClick(e)) {\n      this.trigger('scrollCancel');\n      return;\n    }\n\n    // reset if we are outside of the boundaries\n    if (this.resetPosition(this.options.bounceTime, ease.bounce)) {\n      return;\n    }\n\n    this._translate(newX, newY);\n\n    this.endTime = getNow();\n    var duration = this.endTime - this.startTime;\n    var absDistX = Math.abs(newX - this.startX);\n    var absDistY = Math.abs(newY - this.startY);\n\n    // flick\n    if (this._events.flick && duration < this.options.flickLimitTime && absDistX < this.options.flickLimitDistance && absDistY < this.options.flickLimitDistance) {\n      this.trigger('flick');\n      return;\n    }\n\n    var time = 0;\n    // start momentum animation if needed\n    if (this.options.momentum && duration < this.options.momentumLimitTime && (absDistY > this.options.momentumLimitDistance || absDistX > this.options.momentumLimitDistance)) {\n      var top = false;\n      var bottom = false;\n      var left = false;\n      var right = false;\n      var bounce = this.options.bounce;\n      if (bounce !== false) {\n        top = bounce.top === undefined ? true : bounce.top;\n        bottom = bounce.bottom === undefined ? true : bounce.bottom;\n        left = bounce.left === undefined ? true : bounce.left;\n        right = bounce.right === undefined ? true : bounce.right;\n      }\n      var wrapperWidth = this.directionX === DIRECTION_RIGHT && left || this.directionX === DIRECTION_LEFT && right ? this.wrapperWidth : 0;\n      var wrapperHeight = this.directionY === DIRECTION_DOWN && top || this.directionY === DIRECTION_UP && bottom ? this.wrapperHeight : 0;\n      var momentumX = this.hasHorizontalScroll ? momentum(this.x, this.startX, duration, this.maxScrollX, this.minScrollX, wrapperWidth, this.options, this) : { destination: newX, duration: 0 };\n      var momentumY = this.hasVerticalScroll ? momentum(this.y, this.startY, duration, this.maxScrollY, this.minScrollY, wrapperHeight, this.options, this) : { destination: newY, duration: 0 };\n      newX = momentumX.destination;\n      newY = momentumY.destination;\n      time = Math.max(momentumX.duration, momentumY.duration);\n      this.isInTransition = true;\n    } else {\n      if (this.options.wheel) {\n        newY = this._findNearestValidWheel(newY).y;\n        time = this.options.wheel.adjustTime || 400;\n      }\n    }\n\n    var easing = ease.swipe;\n    if (this.options.snap) {\n      var snap = this._nearestSnap(newX, newY);\n      this.currentPage = snap;\n      time = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(newX - snap.x), 1000), Math.min(Math.abs(newY - snap.y), 1000)), 300);\n      newX = snap.x;\n      newY = snap.y;\n\n      this.directionX = 0;\n      this.directionY = 0;\n      easing = this.options.snap.easing || ease.bounce;\n    }\n\n    if (newX !== this.x || newY !== this.y) {\n      // change easing function when scroller goes out of the boundaries\n      if (newX > this.minScrollX || newX < this.maxScrollX || newY > this.minScrollY || newY < this.maxScrollY) {\n        easing = ease.swipeBounce;\n      }\n      this.scrollTo(newX, newY, time, easing);\n      return;\n    }\n\n    if (this.options.wheel) {\n      this.selectedIndex = this._findNearestValidWheel(this.y).index;\n    }\n\n    this.trigger('scrollEnd', {\n      x: this.x,\n      y: this.y\n    });\n  };\n\n  BScroll.prototype._checkClick = function (e) {\n    // when in the process of pulling down, it should not prevent click\n    var preventClick = this.stopFromTransition && !this.pulling;\n    this.stopFromTransition = false;\n\n    // we scrolled less than 15 pixels\n    if (!this.moved) {\n      if (this.options.wheel) {\n        if (this.target && this.target.className === this.options.wheel.wheelWrapperClass) {\n          var index = this._findNearestValidWheel(this.y).index;\n          var _offset = Math.round((this.pointY + offsetToBody(this.wrapper).top - this.wrapperHeight / 2) / this.itemHeight);\n          this.target = this.items[index + _offset];\n        }\n        var top = offset(this.target).top;\n        var left = offset(this.target).left;\n        top -= this.wrapperOffset.top;\n        top -= Math.round(this.target.offsetHeight / 2 - this.wrapper.offsetHeight / 2) || 0;\n        left -= this.wrapperOffset.left;\n        left -= Math.round(this.target.offsetWidth / 2 - this.wrapper.offsetWidth / 2) || 0;\n\n        top = this._findNearestValidWheel(top).y;\n        this.scrollTo(left, top, this.options.wheel.adjustTime || 400, ease.swipe);\n        return true;\n      } else {\n        if (!preventClick) {\n          var _dblclick = this.options.dblclick;\n          var dblclickTrigged = false;\n          if (_dblclick && this.lastClickTime) {\n            var _dblclick$delay = _dblclick.delay,\n                delay = _dblclick$delay === undefined ? 300 : _dblclick$delay;\n\n            if (getNow() - this.lastClickTime < delay) {\n              dblclickTrigged = true;\n              dblclick(e);\n            }\n          }\n          if (this.options.tap) {\n            tap(e, this.options.tap);\n          }\n\n          if (this.options.click && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n            click(e);\n          }\n          this.lastClickTime = dblclickTrigged ? null : getNow();\n          return true;\n        }\n        return false;\n      }\n    }\n    return false;\n  };\n\n  BScroll.prototype._resize = function () {\n    var _this = this;\n\n    if (!this.enabled) {\n      return;\n    }\n    // fix a scroll problem under Android condition\n    if (isAndroid) {\n      this.wrapper.scrollTop = 0;\n    }\n    clearTimeout(this.resizeTimeout);\n    this.resizeTimeout = setTimeout(function () {\n      _this.refresh();\n    }, this.options.resizePolling);\n  };\n\n  BScroll.prototype._startProbe = function () {\n    cancelAnimationFrame(this.probeTimer);\n    this.probeTimer = requestAnimationFrame(probe);\n\n    var me = this;\n\n    function probe() {\n      var pos = me.getComputedPosition();\n      me.trigger('scroll', pos);\n      if (!me.isInTransition) {\n        me.trigger('scrollEnd', pos);\n        return;\n      }\n      me.probeTimer = requestAnimationFrame(probe);\n    }\n  };\n\n  BScroll.prototype._transitionTime = function () {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n    this.scrollerStyle[style.transitionDuration] = time + 'ms';\n\n    if (this.options.wheel) {\n      for (var i = 0; i < this.items.length; i++) {\n        this.items[i].style[style.transitionDuration] = time + 'ms';\n      }\n    }\n\n    if (this.indicators) {\n      for (var _i = 0; _i < this.indicators.length; _i++) {\n        this.indicators[_i].transitionTime(time);\n      }\n    }\n  };\n\n  BScroll.prototype._transitionTimingFunction = function (easing) {\n    this.scrollerStyle[style.transitionTimingFunction] = easing;\n\n    if (this.options.wheel) {\n      for (var i = 0; i < this.items.length; i++) {\n        this.items[i].style[style.transitionTimingFunction] = easing;\n      }\n    }\n\n    if (this.indicators) {\n      for (var _i2 = 0; _i2 < this.indicators.length; _i2++) {\n        this.indicators[_i2].transitionTimingFunction(easing);\n      }\n    }\n  };\n\n  BScroll.prototype._transitionEnd = function (e) {\n    if (e.target !== this.scroller || !this.isInTransition) {\n      return;\n    }\n\n    this._transitionTime();\n    var needReset = !this.pulling || this.movingDirectionY === DIRECTION_UP;\n    if (needReset && !this.resetPosition(this.options.bounceTime, ease.bounce)) {\n      this.isInTransition = false;\n      if (this.options.probeType !== PROBE_REALTIME) {\n        this.trigger('scrollEnd', {\n          x: this.x,\n          y: this.y\n        });\n      }\n    }\n  };\n\n  BScroll.prototype._translate = function (x, y, scale) {\n    assert(!isUndef(x) && !isUndef(y), 'Translate x or y is null or undefined.');\n    if (isUndef(scale)) {\n      scale = this.scale;\n    }\n    if (this.options.useTransform) {\n      this.scrollerStyle[style.transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')' + this.translateZ;\n    } else {\n      x = Math.round(x);\n      y = Math.round(y);\n      this.scrollerStyle.left = x + 'px';\n      this.scrollerStyle.top = y + 'px';\n    }\n\n    if (this.options.wheel) {\n      var _options$wheel$rotate = this.options.wheel.rotate,\n          rotate = _options$wheel$rotate === undefined ? 25 : _options$wheel$rotate;\n\n      for (var i = 0; i < this.items.length; i++) {\n        var deg = rotate * (y / this.itemHeight + i);\n        this.items[i].style[style.transform] = 'rotateX(' + deg + 'deg)';\n      }\n    }\n\n    this.x = x;\n    this.y = y;\n    this.setScale(scale);\n\n    if (this.indicators) {\n      for (var _i3 = 0; _i3 < this.indicators.length; _i3++) {\n        this.indicators[_i3].updatePosition();\n      }\n    }\n  };\n\n  BScroll.prototype._animate = function (destX, destY, duration, easingFn) {\n    var me = this;\n    var startX = this.x;\n    var startY = this.y;\n    var startScale = this.lastScale;\n    var destScale = this.scale;\n    var startTime = getNow();\n    var destTime = startTime + duration;\n\n    function step() {\n      var now = getNow();\n\n      if (now >= destTime) {\n        me.isAnimating = false;\n        me._translate(destX, destY, destScale);\n\n        me.trigger('scroll', {\n          x: me.x,\n          y: me.y\n        });\n\n        if (!me.pulling && !me.resetPosition(me.options.bounceTime)) {\n          me.trigger('scrollEnd', {\n            x: me.x,\n            y: me.y\n          });\n        }\n        return;\n      }\n      now = (now - startTime) / duration;\n      var easing = easingFn(now);\n      var newX = (destX - startX) * easing + startX;\n      var newY = (destY - startY) * easing + startY;\n      var newScale = (destScale - startScale) * easing + startScale;\n\n      me._translate(newX, newY, newScale);\n\n      if (me.isAnimating) {\n        me.animateTimer = requestAnimationFrame(step);\n      }\n\n      if (me.options.probeType === PROBE_REALTIME) {\n        me.trigger('scroll', {\n          x: me.x,\n          y: me.y\n        });\n      }\n    }\n\n    this.isAnimating = true;\n    cancelAnimationFrame(this.animateTimer);\n    step();\n  };\n\n  BScroll.prototype.scrollBy = function (x, y) {\n    var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n\n    x = this.x + x;\n    y = this.y + y;\n\n    this.scrollTo(x, y, time, easing);\n  };\n\n  BScroll.prototype.scrollTo = function (x, y) {\n    var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n    var isSilent = arguments[4];\n\n    if (this.options.wheel) {\n      y = this._findNearestValidWheel(y).y;\n    }\n    this.isInTransition = this.options.useTransition && time > 0 && (this.x !== x || this.y !== y);\n\n    if (!time || this.options.useTransition) {\n      this._transitionTimingFunction(easing.style);\n      this._transitionTime(time);\n      this._translate(x, y);\n\n      if (time && this.options.probeType === PROBE_REALTIME) {\n        this._startProbe();\n      }\n      if (!time && !isSilent) {\n        // don't trigger resetPosition when zoom feature is open, fix #748\n        if (this.options.zoom) return;\n        this.trigger('scroll', {\n          x: x,\n          y: y\n        });\n        // force reflow to put everything in position\n        this._reflow = document.body.offsetHeight;\n        if (!this.resetPosition(this.options.bounceTime, ease.bounce)) {\n          this.trigger('scrollEnd', {\n            x: x,\n            y: y\n          });\n        }\n      }\n\n      if (this.options.wheel) {\n        this.selectedIndex = this._findNearestValidWheel(y).index;\n      }\n    } else {\n      this._animate(x, y, time, easing.fn);\n    }\n  };\n\n  BScroll.prototype.scrollToElement = function (el, time, offsetX, offsetY, easing) {\n    if (!el) {\n      return;\n    }\n    el = el.nodeType ? el : this.scroller.querySelector(el);\n\n    if (this.options.wheel && !el.classList.contains(this.options.wheel.wheelItemClass)) {\n      return;\n    }\n\n    var pos = offset(el);\n    pos.left -= this.wrapperOffset.left;\n    pos.top -= this.wrapperOffset.top;\n\n    // if offsetX/Y are true we center the element to the screen\n    if (offsetX === true) {\n      offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n    }\n    if (offsetY === true) {\n      offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n    }\n\n    pos.left -= offsetX || 0;\n    pos.top -= offsetY || 0;\n    pos.left = pos.left > this.minScrollX ? this.minScrollX : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n    pos.top = pos.top > this.minScrollY ? this.minScrollY : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\n\n    if (this.options.wheel) {\n      pos.top = this._findNearestValidWheel(pos.top).y;\n    }\n\n    this.scrollTo(pos.left, pos.top, time, easing);\n  };\n\n  BScroll.prototype.resetPosition = function () {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var easeing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ease.bounce;\n\n    var x = this.x;\n    var roundX = Math.round(x);\n    if (!this.hasHorizontalScroll || roundX > this.minScrollX) {\n      x = this.minScrollX;\n    } else if (roundX < this.maxScrollX) {\n      x = this.maxScrollX;\n    }\n\n    var y = this.y;\n    var roundY = Math.round(y);\n    if (!this.hasVerticalScroll || roundY > this.minScrollY) {\n      y = this.minScrollY;\n    } else if (roundY < this.maxScrollY) {\n      y = this.maxScrollY;\n    }\n\n    if (x === this.x && y === this.y) {\n      return false;\n    }\n\n    this.scrollTo(x, y, time, easeing);\n\n    return true;\n  };\n\n  BScroll.prototype.getComputedPosition = function () {\n    var matrix = window.getComputedStyle(this.scroller, null);\n    var x = void 0;\n    var y = void 0;\n\n    if (this.options.useTransform) {\n      matrix = matrix[style.transform].split(')')[0].split(', ');\n      x = +(matrix[12] || matrix[4]);\n      y = +(matrix[13] || matrix[5]);\n    } else {\n      x = +matrix.left.replace(/[^-\\d.]/g, '');\n      y = +matrix.top.replace(/[^-\\d.]/g, '');\n    }\n\n    return {\n      x: x,\n      y: y\n    };\n  };\n\n  BScroll.prototype.stop = function () {\n    if (this.options.useTransition && this.isInTransition) {\n      this.isInTransition = false;\n      cancelAnimationFrame(this.probeTimer);\n      var pos = this.getComputedPosition();\n      this._translate(pos.x, pos.y);\n      if (this.options.wheel) {\n        this.target = this.items[this._findNearestValidWheel(pos.y).index];\n      } else {\n        this.trigger('scrollEnd', {\n          x: this.x,\n          y: this.y\n        });\n      }\n      this.stopFromTransition = true;\n    } else if (!this.options.useTransition && this.isAnimating) {\n      this.isAnimating = false;\n      cancelAnimationFrame(this.animateTimer);\n      this.trigger('scrollEnd', {\n        x: this.x,\n        y: this.y\n      });\n      this.stopFromTransition = true;\n    }\n  };\n\n  BScroll.prototype.destroy = function () {\n    this.destroyed = true;\n    this.trigger('destroy');\n    if (this.options.useTransition) {\n      cancelAnimationFrame(this.probeTimer);\n    } else {\n      cancelAnimationFrame(this.animateTimer);\n    }\n    this._removeDOMEvents();\n    // remove custom events\n    this._events = {};\n  };\n}\n\nfunction snapMixin(BScroll) {\n  BScroll.prototype._initSnap = function () {\n    var _this = this;\n\n    this.currentPage = {};\n    var snap = this.options.snap;\n\n    if (snap.loop) {\n      var children = this.scroller.children;\n      if (children.length > 1) {\n        prepend(children[children.length - 1].cloneNode(true), this.scroller);\n        this.scroller.appendChild(children[1].cloneNode(true));\n      } else {\n        // Loop does not make any sense if there is only one child.\n        snap.loop = false;\n      }\n    }\n\n    var el = snap.el;\n    if (typeof el === 'string') {\n      el = this.scroller.querySelectorAll(el);\n    }\n\n    this.on('refresh', function () {\n      _this.pages = [];\n\n      if (!_this.wrapperWidth || !_this.wrapperHeight || !_this.scrollerWidth || !_this.scrollerHeight) {\n        return;\n      }\n\n      var stepX = snap.stepX || _this.wrapperWidth;\n      var stepY = snap.stepY || _this.wrapperHeight;\n\n      var x = 0;\n      var y = void 0;\n      var cx = void 0;\n      var cy = void 0;\n      var i = 0;\n      var l = void 0;\n      var m = 0;\n      var n = void 0;\n      var rect = void 0;\n      if (!el) {\n        cx = Math.round(stepX / 2);\n        cy = Math.round(stepY / 2);\n\n        while (x > -_this.scrollerWidth) {\n          _this.pages[i] = [];\n          l = 0;\n          y = 0;\n\n          while (y > -_this.scrollerHeight) {\n            _this.pages[i][l] = {\n              x: Math.max(x, _this.maxScrollX),\n              y: Math.max(y, _this.maxScrollY),\n              width: stepX,\n              height: stepY,\n              cx: x - cx,\n              cy: y - cy\n            };\n\n            y -= stepY;\n            l++;\n          }\n\n          x -= stepX;\n          i++;\n        }\n      } else {\n        l = el.length;\n        n = -1;\n\n        for (; i < l; i++) {\n          rect = getRect(el[i]);\n          if (i === 0 || rect.left <= getRect(el[i - 1]).left) {\n            m = 0;\n            n++;\n          }\n\n          if (!_this.pages[m]) {\n            _this.pages[m] = [];\n          }\n\n          x = Math.max(-rect.left, _this.maxScrollX);\n          y = Math.max(-rect.top, _this.maxScrollY);\n          cx = x - Math.round(rect.width / 2);\n          cy = y - Math.round(rect.height / 2);\n\n          _this.pages[m][n] = {\n            x: x,\n            y: y,\n            width: rect.width,\n            height: rect.height,\n            cx: cx,\n            cy: cy\n          };\n\n          if (x > _this.maxScrollX) {\n            m++;\n          }\n        }\n      }\n\n      _this._checkSnapLoop();\n\n      var initPageX = snap._loopX ? 1 : 0;\n      var initPageY = snap._loopY ? 1 : 0;\n      _this._goToPage(_this.currentPage.pageX || initPageX, _this.currentPage.pageY || initPageY, 0, undefined, true);\n\n      // Update snap threshold if needed.\n      var snapThreshold = snap.threshold;\n      if (snapThreshold % 1 === 0) {\n        _this.snapThresholdX = snapThreshold;\n        _this.snapThresholdY = snapThreshold;\n      } else {\n        _this.snapThresholdX = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].width * snapThreshold);\n        _this.snapThresholdY = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].height * snapThreshold);\n      }\n    });\n\n    this.on('scrollEnd', function () {\n      if (snap.loop) {\n        if (snap._loopX) {\n          if (_this.currentPage.pageX === 0) {\n            _this._goToPage(_this.pages.length - 2, _this.currentPage.pageY, 0, undefined, true);\n          }\n          if (_this.currentPage.pageX === _this.pages.length - 1) {\n            _this._goToPage(1, _this.currentPage.pageY, 0, undefined, true);\n          }\n        } else {\n          if (_this.currentPage.pageY === 0) {\n            _this._goToPage(_this.currentPage.pageX, _this.pages[0].length - 2, 0, undefined, true);\n          }\n          if (_this.currentPage.pageY === _this.pages[0].length - 1) {\n            _this._goToPage(_this.currentPage.pageX, 1, 0, undefined, true);\n          }\n        }\n      }\n    });\n\n    if (snap.listenFlick !== false) {\n      this.on('flick', function () {\n        var time = snap.speed || Math.max(Math.max(Math.min(Math.abs(_this.x - _this.startX), 1000), Math.min(Math.abs(_this.y - _this.startY), 1000)), 300);\n\n        _this._goToPage(_this.currentPage.pageX + _this.directionX, _this.currentPage.pageY + _this.directionY, time);\n      });\n    }\n\n    this.on('destroy', function () {\n      if (snap.loop) {\n        var _children = _this.scroller.children;\n        if (_children.length > 2) {\n          removeChild(_this.scroller, _children[_children.length - 1]);\n          removeChild(_this.scroller, _children[0]);\n        }\n      }\n    });\n  };\n\n  BScroll.prototype._checkSnapLoop = function () {\n    var snap = this.options.snap;\n\n    if (!snap.loop || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    if (this.pages.length > 1) {\n      snap._loopX = true;\n    }\n    if (this.pages[0] && this.pages[0].length > 1) {\n      snap._loopY = true;\n    }\n    if (snap._loopX && snap._loopY) {\n      warn('Loop does not support two direction at the same time.');\n    }\n  };\n\n  BScroll.prototype._nearestSnap = function (x, y) {\n    if (!this.pages.length) {\n      return { x: 0, y: 0, pageX: 0, pageY: 0 };\n    }\n\n    var i = 0;\n    // Check if we exceeded the snap threshold\n    if (Math.abs(x - this.absStartX) <= this.snapThresholdX && Math.abs(y - this.absStartY) <= this.snapThresholdY) {\n      return this.currentPage;\n    }\n\n    if (x > this.minScrollX) {\n      x = this.minScrollX;\n    } else if (x < this.maxScrollX) {\n      x = this.maxScrollX;\n    }\n\n    if (y > this.minScrollY) {\n      y = this.minScrollY;\n    } else if (y < this.maxScrollY) {\n      y = this.maxScrollY;\n    }\n\n    var l = this.pages.length;\n    for (; i < l; i++) {\n      if (x >= this.pages[i][0].cx) {\n        x = this.pages[i][0].x;\n        break;\n      }\n    }\n\n    l = this.pages[i].length;\n\n    var m = 0;\n    for (; m < l; m++) {\n      if (y >= this.pages[0][m].cy) {\n        y = this.pages[0][m].y;\n        break;\n      }\n    }\n\n    if (i === this.currentPage.pageX) {\n      i += this.directionX;\n\n      if (i < 0) {\n        i = 0;\n      } else if (i >= this.pages.length) {\n        i = this.pages.length - 1;\n      }\n\n      x = this.pages[i][0].x;\n    }\n\n    if (m === this.currentPage.pageY) {\n      m += this.directionY;\n\n      if (m < 0) {\n        m = 0;\n      } else if (m >= this.pages[0].length) {\n        m = this.pages[0].length - 1;\n      }\n\n      y = this.pages[0][m].y;\n    }\n\n    return {\n      x: x,\n      y: y,\n      pageX: i,\n      pageY: m\n    };\n  };\n\n  BScroll.prototype._goToPage = function (x) {\n    var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    var time = arguments[2];\n    var easing = arguments[3];\n    var isSilent = arguments[4];\n\n    var snap = this.options.snap;\n\n    if (!snap || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    easing = easing || snap.easing || ease.bounce;\n\n    if (x >= this.pages.length) {\n      x = this.pages.length - 1;\n    } else if (x < 0) {\n      x = 0;\n    }\n\n    if (!this.pages[x]) {\n      return;\n    }\n\n    if (y >= this.pages[x].length) {\n      y = this.pages[x].length - 1;\n    } else if (y < 0) {\n      y = 0;\n    }\n\n    var posX = this.pages[x][y].x;\n    var posY = this.pages[x][y].y;\n\n    time = time === undefined ? snap.speed || Math.max(Math.max(Math.min(Math.abs(posX - this.x), 1000), Math.min(Math.abs(posY - this.y), 1000)), 300) : time;\n\n    this.currentPage = {\n      x: posX,\n      y: posY,\n      pageX: x,\n      pageY: y\n    };\n    this.scrollTo(posX, posY, time, easing, isSilent);\n  };\n\n  BScroll.prototype.goToPage = function (x, y, time, easing) {\n    var snap = this.options.snap;\n    if (!snap || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    if (snap.loop) {\n      var len = void 0;\n      if (snap._loopX) {\n        len = this.pages.length - 2;\n        if (x >= len) {\n          x = len - 1;\n        } else if (x < 0) {\n          x = 0;\n        }\n        x += 1;\n      } else {\n        len = this.pages[0].length - 2;\n        if (y >= len) {\n          y = len - 1;\n        } else if (y < 0) {\n          y = 0;\n        }\n        y += 1;\n      }\n    }\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.next = function (time, easing) {\n    var snap = this.options.snap;\n    if (!snap) {\n      return;\n    }\n\n    var x = this.currentPage.pageX;\n    var y = this.currentPage.pageY;\n\n    x++;\n    if (x >= this.pages.length && this.hasVerticalScroll) {\n      x = 0;\n      y++;\n    }\n\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.prev = function (time, easing) {\n    var snap = this.options.snap;\n    if (!snap) {\n      return;\n    }\n\n    var x = this.currentPage.pageX;\n    var y = this.currentPage.pageY;\n\n    x--;\n    if (x < 0 && this.hasVerticalScroll) {\n      x = 0;\n      y--;\n    }\n\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.getCurrentPage = function () {\n    var snap = this.options.snap;\n    if (!snap) {\n      return null;\n    }\n\n    if (snap.loop) {\n      var currentPage = void 0;\n      if (snap._loopX) {\n        currentPage = extend({}, this.currentPage, {\n          pageX: this.currentPage.pageX - 1\n        });\n      } else {\n        currentPage = extend({}, this.currentPage, {\n          pageY: this.currentPage.pageY - 1\n        });\n      }\n      return currentPage;\n    }\n    return this.currentPage;\n  };\n}\n\nfunction wheelMixin(BScroll) {\n  BScroll.prototype.wheelTo = function () {\n    var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n    if (this.options.wheel) {\n      var y = -index * this.itemHeight;\n      this.scrollTo(0, y);\n    }\n  };\n\n  BScroll.prototype.getSelectedIndex = function () {\n    return this.options.wheel && this.selectedIndex;\n  };\n\n  BScroll.prototype._initWheel = function () {\n    var wheel = this.options.wheel;\n    if (!wheel.wheelWrapperClass) {\n      wheel.wheelWrapperClass = 'wheel-scroll';\n    }\n    if (!wheel.wheelItemClass) {\n      wheel.wheelItemClass = 'wheel-item';\n    }\n    if (!wheel.wheelDisabledItemClass) {\n      wheel.wheelDisabledItemClass = 'wheel-disabled-item';\n    }\n    if (wheel.selectedIndex === undefined) {\n      wheel.selectedIndex = 0;\n    }\n  };\n\n  BScroll.prototype._findNearestValidWheel = function (y) {\n    y = y > 0 ? 0 : y < this.maxScrollY ? this.maxScrollY : y;\n    var wheel = this.options.wheel;\n    var currentIndex = Math.abs(Math.round(-y / this.itemHeight));\n    var cacheIndex = currentIndex;\n    var items = this.items;\n    // Impersonation web native select\n    // first, check whether there is a enable item whose index is smaller than currentIndex\n    // then, check whether there is a enable item whose index is bigger than currentIndex\n    // otherwise, there are all disabled items, just keep currentIndex unchange\n    while (currentIndex >= 0) {\n      if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n        break;\n      }\n      currentIndex--;\n    }\n\n    if (currentIndex < 0) {\n      currentIndex = cacheIndex;\n      while (currentIndex <= items.length - 1) {\n        if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n          break;\n        }\n        currentIndex++;\n      }\n    }\n\n    // keep it unchange when all the items are disabled\n    if (currentIndex === items.length) {\n      currentIndex = cacheIndex;\n    }\n    // when all the items are disabled, this.selectedIndex should always be -1\n    return {\n      index: this.wheelItemsAllDisabled ? -1 : currentIndex,\n      y: -currentIndex * this.itemHeight\n    };\n  };\n\n  BScroll.prototype._checkWheelAllDisabled = function () {\n    var wheel = this.options.wheel;\n    var items = this.items;\n    this.wheelItemsAllDisabled = true;\n    for (var i = 0; i < items.length; i++) {\n      if (items[i].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n        this.wheelItemsAllDisabled = false;\n        break;\n      }\n    }\n  };\n}\n\nvar INDICATOR_MIN_LEN = 8;\n\nfunction scrollbarMixin(BScroll) {\n  BScroll.prototype._initScrollbar = function () {\n    var _this = this;\n\n    var _options$scrollbar = this.options.scrollbar,\n        _options$scrollbar$fa = _options$scrollbar.fade,\n        fade = _options$scrollbar$fa === undefined ? true : _options$scrollbar$fa,\n        _options$scrollbar$in = _options$scrollbar.interactive,\n        interactive = _options$scrollbar$in === undefined ? false : _options$scrollbar$in;\n\n    this.indicators = [];\n    var indicator = void 0;\n\n    if (this.options.scrollX) {\n      indicator = {\n        el: createScrollbar('horizontal'),\n        direction: 'horizontal',\n        fade: fade,\n        interactive: interactive\n      };\n      this._insertScrollBar(indicator.el);\n\n      this.indicators.push(new Indicator(this, indicator));\n    }\n\n    if (this.options.scrollY) {\n      indicator = {\n        el: createScrollbar('vertical'),\n        direction: 'vertical',\n        fade: fade,\n        interactive: interactive\n      };\n      this._insertScrollBar(indicator.el);\n      this.indicators.push(new Indicator(this, indicator));\n    }\n\n    this.on('refresh', function () {\n      for (var i = 0; i < _this.indicators.length; i++) {\n        _this.indicators[i].refresh();\n      }\n    });\n\n    if (fade) {\n      this.on('scrollEnd', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade();\n        }\n      });\n\n      this.on('scrollCancel', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade();\n        }\n      });\n\n      this.on('scrollStart', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade(true);\n        }\n      });\n\n      this.on('beforeScrollStart', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade(true, true);\n        }\n      });\n    }\n\n    this.on('destroy', function () {\n      _this._removeScrollBars();\n    });\n  };\n\n  BScroll.prototype._insertScrollBar = function (scrollbar) {\n    this.wrapper.appendChild(scrollbar);\n  };\n\n  BScroll.prototype._removeScrollBars = function () {\n    for (var i = 0; i < this.indicators.length; i++) {\n      this.indicators[i].destroy();\n    }\n  };\n}\n\nfunction createScrollbar(direction) {\n  var scrollbar = document.createElement('div');\n  var indicator = document.createElement('div');\n\n  scrollbar.style.cssText = 'position:absolute;z-index:9999;pointerEvents:none';\n  indicator.style.cssText = 'box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;';\n\n  indicator.className = 'bscroll-indicator';\n\n  if (direction === 'horizontal') {\n    scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n    indicator.style.height = '100%';\n    scrollbar.className = 'bscroll-horizontal-scrollbar';\n  } else {\n    scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n    indicator.style.width = '100%';\n    scrollbar.className = 'bscroll-vertical-scrollbar';\n  }\n\n  scrollbar.style.cssText += ';overflow:hidden';\n  scrollbar.appendChild(indicator);\n\n  return scrollbar;\n}\n\nfunction Indicator(scroller, options) {\n  this.wrapper = options.el;\n  this.wrapperStyle = this.wrapper.style;\n  this.indicator = this.wrapper.children[0];\n  this.indicatorStyle = this.indicator.style;\n  this.scroller = scroller;\n  this.direction = options.direction;\n  if (options.fade) {\n    this.visible = 0;\n    this.wrapperStyle.opacity = '0';\n  } else {\n    this.visible = 1;\n  }\n\n  this.sizeRatioX = 1;\n  this.sizeRatioY = 1;\n  this.maxPosX = 0;\n  this.maxPosY = 0;\n  this.x = 0;\n  this.y = 0;\n\n  if (options.interactive) {\n    this._addDOMEvents();\n  }\n}\n\nIndicator.prototype.handleEvent = function (e) {\n  switch (e.type) {\n    case 'touchstart':\n    case 'mousedown':\n      this._start(e);\n      break;\n    case 'touchmove':\n    case 'mousemove':\n      this._move(e);\n      break;\n    case 'touchend':\n    case 'mouseup':\n    case 'touchcancel':\n    case 'mousecancel':\n      this._end(e);\n      break;\n  }\n};\n\nIndicator.prototype.refresh = function () {\n  if (this._shouldShow()) {\n    this.transitionTime();\n    this._calculate();\n    this.updatePosition();\n  }\n};\n\nIndicator.prototype.fade = function (visible, hold) {\n  var _this2 = this;\n\n  if (hold && !this.visible) {\n    return;\n  }\n\n  var time = visible ? 250 : 500;\n\n  visible = visible ? '1' : '0';\n\n  this.wrapperStyle[style.transitionDuration] = time + 'ms';\n\n  clearTimeout(this.fadeTimeout);\n  this.fadeTimeout = setTimeout(function () {\n    _this2.wrapperStyle.opacity = visible;\n    _this2.visible = +visible;\n  }, 0);\n};\n\nIndicator.prototype.updatePosition = function () {\n  if (this.direction === 'vertical') {\n    var y = Math.round(this.sizeRatioY * this.scroller.y);\n\n    if (y < 0) {\n      this.transitionTime(500);\n      var height = Math.max(this.indicatorHeight + y * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.height = height + 'px';\n      y = 0;\n    } else if (y > this.maxPosY) {\n      this.transitionTime(500);\n      var _height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.height = _height + 'px';\n      y = this.maxPosY + this.indicatorHeight - _height;\n    } else {\n      this.indicatorStyle.height = this.indicatorHeight + 'px';\n    }\n    this.y = y;\n\n    if (this.scroller.options.useTransform) {\n      this.indicatorStyle[style.transform] = 'translateY(' + y + 'px)' + this.scroller.translateZ;\n    } else {\n      this.indicatorStyle.top = y + 'px';\n    }\n  } else {\n    var x = Math.round(this.sizeRatioX * this.scroller.x);\n\n    if (x < 0) {\n      this.transitionTime(500);\n      var width = Math.max(this.indicatorWidth + x * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.width = width + 'px';\n      x = 0;\n    } else if (x > this.maxPosX) {\n      this.transitionTime(500);\n      var _width = Math.max(this.indicatorWidth - (x - this.maxPosX) * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.width = _width + 'px';\n      x = this.maxPosX + this.indicatorWidth - _width;\n    } else {\n      this.indicatorStyle.width = this.indicatorWidth + 'px';\n    }\n\n    this.x = x;\n\n    if (this.scroller.options.useTransform) {\n      this.indicatorStyle[style.transform] = 'translateX(' + x + 'px)' + this.scroller.translateZ;\n    } else {\n      this.indicatorStyle.left = x + 'px';\n    }\n  }\n};\n\nIndicator.prototype.transitionTime = function () {\n  var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n  this.indicatorStyle[style.transitionDuration] = time + 'ms';\n};\n\nIndicator.prototype.transitionTimingFunction = function (easing) {\n  this.indicatorStyle[style.transitionTimingFunction] = easing;\n};\n\nIndicator.prototype.destroy = function () {\n  this._removeDOMEvents();\n  this.wrapper.parentNode.removeChild(this.wrapper);\n};\n\nIndicator.prototype._start = function (e) {\n  var point = e.touches ? e.touches[0] : e;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  this.transitionTime();\n\n  this.initiated = true;\n  this.moved = false;\n  this.lastPointX = point.pageX;\n  this.lastPointY = point.pageY;\n\n  this.startTime = getNow();\n\n  this._handleMoveEvents(addEvent);\n  this.scroller.trigger('beforeScrollStart');\n};\n\nIndicator.prototype._move = function (e) {\n  var point = e.touches ? e.touches[0] : e;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  if (!this.moved) {\n    this.scroller.trigger('scrollStart');\n  }\n\n  this.moved = true;\n\n  var deltaX = point.pageX - this.lastPointX;\n  this.lastPointX = point.pageX;\n\n  var deltaY = point.pageY - this.lastPointY;\n  this.lastPointY = point.pageY;\n\n  var newX = this.x + deltaX;\n  var newY = this.y + deltaY;\n\n  this._pos(newX, newY);\n};\n\nIndicator.prototype._end = function (e) {\n  if (!this.initiated) {\n    return;\n  }\n  this.initiated = false;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  this._handleMoveEvents(removeEvent);\n\n  var snapOption = this.scroller.options.snap;\n  if (snapOption) {\n    var speed = snapOption.speed,\n        _snapOption$easing = snapOption.easing,\n        easing = _snapOption$easing === undefined ? ease.bounce : _snapOption$easing;\n\n    var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n    var time = speed || Math.max(Math.max(Math.min(Math.abs(this.scroller.x - snap.x), 1000), Math.min(Math.abs(this.scroller.y - snap.y), 1000)), 300);\n\n    if (this.scroller.x !== snap.x || this.scroller.y !== snap.y) {\n      this.scroller.directionX = 0;\n      this.scroller.directionY = 0;\n      this.scroller.currentPage = snap;\n      this.scroller.scrollTo(snap.x, snap.y, time, easing);\n    }\n  }\n\n  if (this.moved) {\n    this.scroller.trigger('scrollEnd', {\n      x: this.scroller.x,\n      y: this.scroller.y\n    });\n  }\n};\n\nIndicator.prototype._pos = function (x, y) {\n  if (x < 0) {\n    x = 0;\n  } else if (x > this.maxPosX) {\n    x = this.maxPosX;\n  }\n\n  if (y < 0) {\n    y = 0;\n  } else if (y > this.maxPosY) {\n    y = this.maxPosY;\n  }\n\n  x = Math.round(x / this.sizeRatioX);\n  y = Math.round(y / this.sizeRatioY);\n\n  this.scroller.scrollTo(x, y);\n  this.scroller.trigger('scroll', {\n    x: this.scroller.x,\n    y: this.scroller.y\n  });\n};\n\nIndicator.prototype._shouldShow = function () {\n  if (this.direction === 'vertical' && this.scroller.hasVerticalScroll || this.direction === 'horizontal' && this.scroller.hasHorizontalScroll) {\n    this.wrapper.style.display = '';\n    return true;\n  }\n  this.wrapper.style.display = 'none';\n  return false;\n};\n\nIndicator.prototype._calculate = function () {\n  if (this.direction === 'vertical') {\n    var wrapperHeight = this.wrapper.clientHeight;\n    this.indicatorHeight = Math.max(Math.round(wrapperHeight * wrapperHeight / (this.scroller.scrollerHeight || wrapperHeight || 1)), INDICATOR_MIN_LEN);\n    this.indicatorStyle.height = this.indicatorHeight + 'px';\n\n    this.maxPosY = wrapperHeight - this.indicatorHeight;\n\n    this.sizeRatioY = this.maxPosY / this.scroller.maxScrollY;\n  } else {\n    var wrapperWidth = this.wrapper.clientWidth;\n    this.indicatorWidth = Math.max(Math.round(wrapperWidth * wrapperWidth / (this.scroller.scrollerWidth || wrapperWidth || 1)), INDICATOR_MIN_LEN);\n    this.indicatorStyle.width = this.indicatorWidth + 'px';\n\n    this.maxPosX = wrapperWidth - this.indicatorWidth;\n\n    this.sizeRatioX = this.maxPosX / this.scroller.maxScrollX;\n  }\n};\n\nIndicator.prototype._addDOMEvents = function () {\n  var eventOperation = addEvent;\n  this._handleDOMEvents(eventOperation);\n};\n\nIndicator.prototype._removeDOMEvents = function () {\n  var eventOperation = removeEvent;\n  this._handleDOMEvents(eventOperation);\n  this._handleMoveEvents(eventOperation);\n};\n\nIndicator.prototype._handleMoveEvents = function (eventOperation) {\n  if (!this.scroller.options.disableTouch) {\n    eventOperation(window, 'touchmove', this);\n  }\n  if (!this.scroller.options.disableMouse) {\n    eventOperation(window, 'mousemove', this);\n  }\n};\n\nIndicator.prototype._handleDOMEvents = function (eventOperation) {\n  if (!this.scroller.options.disableTouch) {\n    eventOperation(this.indicator, 'touchstart', this);\n    eventOperation(window, 'touchend', this);\n  }\n  if (!this.scroller.options.disableMouse) {\n    eventOperation(this.indicator, 'mousedown', this);\n    eventOperation(window, 'mouseup', this);\n  }\n};\n\nfunction pullDownMixin(BScroll) {\n  BScroll.prototype._initPullDown = function () {\n    // must watch scroll in real time\n    this.options.probeType = PROBE_REALTIME;\n  };\n\n  BScroll.prototype._checkPullDown = function () {\n    var _options$pullDownRefr = this.options.pullDownRefresh,\n        _options$pullDownRefr2 = _options$pullDownRefr.threshold,\n        threshold = _options$pullDownRefr2 === undefined ? 90 : _options$pullDownRefr2,\n        _options$pullDownRefr3 = _options$pullDownRefr.stop,\n        stop = _options$pullDownRefr3 === undefined ? 40 : _options$pullDownRefr3;\n\n    // check if a real pull down action\n\n    if (this.directionY !== DIRECTION_DOWN || this.y < threshold) {\n      return false;\n    }\n\n    if (!this.pulling) {\n      this.pulling = true;\n      this.trigger('pullingDown');\n    }\n    this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n\n    return this.pulling;\n  };\n\n  BScroll.prototype.finishPullDown = function () {\n    this.pulling = false;\n    this.resetPosition(this.options.bounceTime, ease.bounce);\n  };\n\n  BScroll.prototype.openPullDown = function () {\n    var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    this.options.pullDownRefresh = config;\n    this._initPullDown();\n  };\n\n  BScroll.prototype.closePullDown = function () {\n    this.options.pullDownRefresh = false;\n  };\n\n  BScroll.prototype.autoPullDownRefresh = function () {\n    var _options$pullDownRefr4 = this.options.pullDownRefresh,\n        _options$pullDownRefr5 = _options$pullDownRefr4.threshold,\n        threshold = _options$pullDownRefr5 === undefined ? 90 : _options$pullDownRefr5,\n        _options$pullDownRefr6 = _options$pullDownRefr4.stop,\n        stop = _options$pullDownRefr6 === undefined ? 40 : _options$pullDownRefr6;\n\n\n    if (this.pulling) {\n      return;\n    }\n    this.pulling = true;\n\n    this.scrollTo(this.x, threshold);\n    this.trigger('pullingDown');\n    this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n  };\n}\n\nfunction pullUpMixin(BScroll) {\n  BScroll.prototype._initPullUp = function () {\n    // must watch scroll in real time\n    this.options.probeType = PROBE_REALTIME;\n\n    this.pullupWatching = false;\n    this._watchPullUp();\n  };\n\n  BScroll.prototype._watchPullUp = function () {\n    if (this.pullupWatching) {\n      return;\n    }\n    this.pullupWatching = true;\n    this.on('scroll', this._checkToEnd);\n  };\n\n  BScroll.prototype._checkToEnd = function (pos) {\n    var _this = this;\n\n    var _options$pullUpLoad$t = this.options.pullUpLoad.threshold,\n        threshold = _options$pullUpLoad$t === undefined ? 0 : _options$pullUpLoad$t;\n\n    if (this.movingDirectionY === DIRECTION_UP && pos.y <= this.maxScrollY + threshold) {\n      // reset pullupWatching status after scroll end.\n      this.once('scrollEnd', function () {\n        _this.pullupWatching = false;\n      });\n      this.trigger('pullingUp');\n      this.off('scroll', this._checkToEnd);\n    }\n  };\n\n  BScroll.prototype.finishPullUp = function () {\n    var _this2 = this;\n\n    if (this.pullupWatching) {\n      this.once('scrollEnd', function () {\n        _this2._watchPullUp();\n      });\n    } else {\n      this._watchPullUp();\n    }\n  };\n\n  BScroll.prototype.openPullUp = function () {\n    var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    this.options.pullUpLoad = config;\n    this._initPullUp();\n  };\n\n  BScroll.prototype.closePullUp = function () {\n    this.options.pullUpLoad = false;\n    if (!this.pullupWatching) {\n      return;\n    }\n    this.pullupWatching = false;\n    this.off('scroll', this._checkToEnd);\n  };\n}\n\nfunction mouseWheelMixin(BScroll) {\n  BScroll.prototype._initMouseWheel = function () {\n    var _this = this;\n\n    this._handleMouseWheelEvent(addEvent);\n\n    this.on('destroy', function () {\n      clearTimeout(_this.mouseWheelTimer);\n      clearTimeout(_this.mouseWheelEndTimer);\n      _this._handleMouseWheelEvent(removeEvent);\n    });\n\n    this.firstWheelOpreation = true;\n  };\n\n  BScroll.prototype._handleMouseWheelEvent = function (eventOperation) {\n    eventOperation(this.wrapper, 'wheel', this);\n    eventOperation(this.wrapper, 'mousewheel', this);\n    eventOperation(this.wrapper, 'DOMMouseScroll', this);\n  };\n\n  BScroll.prototype._onMouseWheel = function (e) {\n    var _this2 = this;\n\n    if (!this.enabled) {\n      return;\n    }\n    e.preventDefault();\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    if (this.firstWheelOpreation) {\n      this.trigger('scrollStart');\n    }\n    this.firstWheelOpreation = false;\n\n    var _options$mouseWheel = this.options.mouseWheel,\n        _options$mouseWheel$s = _options$mouseWheel.speed,\n        speed = _options$mouseWheel$s === undefined ? 20 : _options$mouseWheel$s,\n        _options$mouseWheel$i = _options$mouseWheel.invert,\n        invert = _options$mouseWheel$i === undefined ? false : _options$mouseWheel$i,\n        _options$mouseWheel$e = _options$mouseWheel.easeTime,\n        easeTime = _options$mouseWheel$e === undefined ? 300 : _options$mouseWheel$e;\n\n\n    clearTimeout(this.mouseWheelTimer);\n    this.mouseWheelTimer = setTimeout(function () {\n      if (!_this2.options.snap && !easeTime) {\n        _this2.trigger('scrollEnd', {\n          x: _this2.x,\n          y: _this2.y\n        });\n      }\n      _this2.firstWheelOpreation = true;\n    }, 400);\n\n    var wheelDeltaX = void 0;\n    var wheelDeltaY = void 0;\n\n    switch (true) {\n      case 'deltaX' in e:\n        if (e.deltaMode === 1) {\n          wheelDeltaX = -e.deltaX * speed;\n          wheelDeltaY = -e.deltaY * speed;\n        } else {\n          wheelDeltaX = -e.deltaX;\n          wheelDeltaY = -e.deltaY;\n        }\n        break;\n      case 'wheelDeltaX' in e:\n        wheelDeltaX = e.wheelDeltaX / 120 * speed;\n        wheelDeltaY = e.wheelDeltaY / 120 * speed;\n        break;\n      case 'wheelDelta' in e:\n        wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * speed;\n        break;\n      case 'detail' in e:\n        wheelDeltaX = wheelDeltaY = -e.detail / 3 * speed;\n        break;\n      default:\n        return;\n    }\n\n    var direction = invert ? -1 : 1;\n    wheelDeltaX *= direction;\n    wheelDeltaY *= direction;\n\n    if (!this.hasVerticalScroll) {\n      wheelDeltaX = wheelDeltaY;\n      wheelDeltaY = 0;\n    }\n\n    var newX = void 0;\n    var newY = void 0;\n    if (this.options.snap) {\n      newX = this.currentPage.pageX;\n      newY = this.currentPage.pageY;\n\n      if (wheelDeltaX > 0) {\n        newX--;\n      } else if (wheelDeltaX < 0) {\n        newX++;\n      }\n\n      if (wheelDeltaY > 0) {\n        newY--;\n      } else if (wheelDeltaY < 0) {\n        newY++;\n      }\n\n      this._goToPage(newX, newY);\n      return;\n    }\n\n    newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n    newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n\n    this.movingDirectionX = this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n    this.movingDirectionY = this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n    if (newX > this.minScrollX) {\n      newX = this.minScrollX;\n    } else if (newX < this.maxScrollX) {\n      newX = this.maxScrollX;\n    }\n\n    if (newY > this.minScrollY) {\n      newY = this.minScrollY;\n    } else if (newY < this.maxScrollY) {\n      newY = this.maxScrollY;\n    }\n\n    var needTriggerEnd = this.y === newY;\n    this.scrollTo(newX, newY, easeTime, ease.swipe);\n    this.trigger('scroll', {\n      x: this.x,\n      y: this.y\n    });\n    clearTimeout(this.mouseWheelEndTimer);\n    if (needTriggerEnd) {\n      this.mouseWheelEndTimer = setTimeout(function () {\n        _this2.trigger('scrollEnd', {\n          x: _this2.x,\n          y: _this2.y\n        });\n      }, easeTime);\n    }\n  };\n}\n\nfunction zoomMixin(BScroll) {\n  BScroll.prototype._initZoom = function () {\n    var _options$zoom = this.options.zoom,\n        _options$zoom$start = _options$zoom.start,\n        start = _options$zoom$start === undefined ? 1 : _options$zoom$start,\n        _options$zoom$min = _options$zoom.min,\n        min = _options$zoom$min === undefined ? 1 : _options$zoom$min,\n        _options$zoom$max = _options$zoom.max,\n        max = _options$zoom$max === undefined ? 4 : _options$zoom$max;\n\n    this.scale = Math.min(Math.max(start, min), max);\n    this.setScale(this.scale);\n    this.scrollerStyle[style.transformOrigin] = '0 0';\n  };\n\n  BScroll.prototype._zoomTo = function (scale, originX, originY, startScale) {\n    this.scaled = true;\n\n    var lastScale = scale / (startScale || this.scale);\n    this.setScale(scale);\n\n    this.refresh();\n\n    var newX = Math.round(this.startX - (originX - this.relativeX) * (lastScale - 1));\n    var newY = Math.round(this.startY - (originY - this.relativeY) * (lastScale - 1));\n\n    if (newX > this.minScrollX) {\n      newX = this.minScrollX;\n    } else if (newX < this.maxScrollX) {\n      newX = this.maxScrollX;\n    }\n\n    if (newY > this.minScrollY) {\n      newY = this.minScrollY;\n    } else if (newY < this.maxScrollY) {\n      newY = this.maxScrollY;\n    }\n\n    if (this.x !== newX || this.y !== newY) {\n      this.scrollTo(newX, newY, this.options.bounceTime);\n    }\n\n    this.scaled = false;\n  };\n\n  BScroll.prototype.zoomTo = function (scale, x, y) {\n    var _offsetToBody = offsetToBody(this.wrapper),\n        left = _offsetToBody.left,\n        top = _offsetToBody.top;\n\n    var originX = x + left - this.x;\n    var originY = y + top - this.y;\n    this._zoomTo(scale, originX, originY);\n  };\n\n  BScroll.prototype._zoomStart = function (e) {\n    var firstFinger = e.touches[0];\n    var secondFinger = e.touches[1];\n    var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n    var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n\n    this.startDistance = getDistance(deltaX, deltaY);\n    this.startScale = this.scale;\n\n    var _offsetToBody2 = offsetToBody(this.wrapper),\n        left = _offsetToBody2.left,\n        top = _offsetToBody2.top;\n\n    this.originX = Math.abs(firstFinger.pageX + secondFinger.pageX) / 2 + left - this.x;\n    this.originY = Math.abs(firstFinger.pageY + secondFinger.pageY) / 2 + top - this.y;\n\n    this.trigger('zoomStart');\n  };\n\n  BScroll.prototype._zoom = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    var firstFinger = e.touches[0];\n    var secondFinger = e.touches[1];\n    var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n    var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n    var distance = getDistance(deltaX, deltaY);\n    var scale = distance / this.startDistance * this.startScale;\n\n    this.scaled = true;\n\n    var _options$zoom2 = this.options.zoom,\n        _options$zoom2$min = _options$zoom2.min,\n        min = _options$zoom2$min === undefined ? 1 : _options$zoom2$min,\n        _options$zoom2$max = _options$zoom2.max,\n        max = _options$zoom2$max === undefined ? 4 : _options$zoom2$max;\n\n\n    if (scale < min) {\n      scale = 0.5 * min * Math.pow(2.0, scale / min);\n    } else if (scale > max) {\n      scale = 2.0 * max * Math.pow(0.5, max / scale);\n    }\n\n    var lastScale = scale / this.startScale;\n\n    var x = this.startX - (this.originX - this.relativeX) * (lastScale - 1);\n    var y = this.startY - (this.originY - this.relativeY) * (lastScale - 1);\n\n    this.setScale(scale);\n\n    this.scrollTo(x, y, 0);\n  };\n\n  BScroll.prototype._zoomEnd = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.isInTransition = false;\n    this.isAnimating = false;\n    this.initiated = 0;\n\n    var _options$zoom3 = this.options.zoom,\n        _options$zoom3$min = _options$zoom3.min,\n        min = _options$zoom3$min === undefined ? 1 : _options$zoom3$min,\n        _options$zoom3$max = _options$zoom3.max,\n        max = _options$zoom3$max === undefined ? 4 : _options$zoom3$max;\n\n\n    var scale = this.scale > max ? max : this.scale < min ? min : this.scale;\n\n    this._zoomTo(scale, this.originX, this.originY, this.startScale);\n\n    this.trigger('zoomEnd');\n  };\n}\n\n// import { ease } from '../util/ease'\n\n// Number of items to instantiate beyond current view in the scroll direction.\nvar RUNWAY_ITEMS = 30;\n\n// Number of items to instantiate beyond current view in the opposite direction.\nvar RUNWAY_ITEMS_OPPOSITE = 10;\n\n// The animation interval (in ms) for fading in content from tombstones.\nvar ANIMATION_DURATION_MS = 200;\n\n// The number of pixels of default additional length to allow scrolling to.\nvar DEFAULT_SCROLL_RUNWAY = 2000;\n\nfunction infiniteMixin(BScroll) {\n  BScroll.prototype._initInfinite = function () {\n    this.options.probeType = 3;\n    this.maxScrollY = -DEFAULT_SCROLL_RUNWAY;\n    this.infiniteScroller = new InfiniteScroller(this, this.options.infinity);\n  };\n}\n\nfunction isTombstoneNode(node) {\n  if (node && node.classList) {\n    return node.classList.contains('tombstone');\n  }\n}\n\nfunction InfiniteScroller(scroller, options) {\n  var _this = this;\n\n  this.options = options;\n  assert(typeof this.options.createTombstone === 'function', 'Infinite scroll need createTombstone Function to create tombstone');\n\n  assert(typeof this.options.fetch === 'function', 'Infinite scroll need fetch Function to fetch new data.');\n\n  assert(typeof this.options.render === 'function', 'Infinite scroll need render Function to render each item.');\n\n  this.firstAttachedItem = 0;\n  this.lastAttachedItem = 0;\n\n  this.anchorScrollTop = 0;\n  this.anchorItem = {\n    index: 0,\n    offset: 0\n  };\n  this.tombstoneHeight = 0;\n  this.tombstoneWidth = 0;\n  this.tombstones = [];\n  this.tombstonesAnimationHandlers = [];\n\n  this.items = [];\n  this.loadedItems = 0;\n  this.requestInProgress = false;\n  this.hasMore = true;\n\n  this.scroller = scroller;\n  this.wrapperEl = this.scroller.wrapper;\n  this.scrollerEl = this.scroller.scroller;\n\n  this.scroller.on('resize', function () {\n    _this.onResize();\n  });\n  this.scroller.on('destroy', function () {\n    _this.destroy();\n  });\n\n  // wait scroll core init\n  this._onResizeHandler = setTimeout(function () {\n    _this.onResize();\n\n    // must wait tombstoneHeight has size\n    _this.scroller.on('scroll', function () {\n      _this.onScroll();\n    });\n  });\n}\n\nInfiniteScroller.prototype.destroy = function () {\n  var _this2 = this;\n\n  // In extreme scene, destroy is triggered before _onResizeHandler\n  clearTimeout(this._onResizeHandler);\n  this.tombstonesAnimationHandlers.forEach(function (handler) {\n    clearTimeout(handler);\n  });\n  this.tombstonesAnimationHandlers = null;\n  this.items.forEach(function (item) {\n    if (item.node) {\n      _this2.scrollerEl.removeChild(item.node);\n      item.node = null;\n    }\n  });\n  this.scroller.infiniteScroller = null;\n  this.scroller = null;\n  this.wrapperEl = null;\n  this.scrollerEl = null;\n  this.items = null;\n  this.tombstones = null;\n};\n\nInfiniteScroller.prototype.onScroll = function () {\n  var scrollTop = -this.scroller.y;\n  var delta = scrollTop - this.anchorScrollTop;\n  if (scrollTop === 0) {\n    this.anchorItem = {\n      index: 0,\n      offset: 0\n    };\n  } else {\n    this.anchorItem = this._calculateAnchoredItem(this.anchorItem, delta);\n  }\n\n  this.anchorScrollTop = scrollTop;\n  var lastScreenItem = this._calculateAnchoredItem(this.anchorItem, this.scroller.wrapperHeight);\n\n  var start = this.anchorItem.index;\n  var end = lastScreenItem.index;\n  if (delta < 0) {\n    start -= RUNWAY_ITEMS;\n    end += RUNWAY_ITEMS_OPPOSITE;\n  } else {\n    start -= RUNWAY_ITEMS_OPPOSITE;\n    end += RUNWAY_ITEMS;\n  }\n  this.fill(start, end);\n  this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.onResize = function () {\n  var tombstone = this.options.createTombstone();\n  tombstone.style.position = 'absolute';\n  this.scrollerEl.appendChild(tombstone);\n  tombstone.style.display = '';\n  this.tombstoneHeight = tombstone.offsetHeight;\n  this.tombstoneWidth = tombstone.offsetWidth;\n  this.scrollerEl.removeChild(tombstone);\n\n  for (var i = 0; i < this.items.length; i++) {\n    this.items[i].height = this.items[i].width = 0;\n  }\n\n  this.onScroll();\n};\n\nInfiniteScroller.prototype.fill = function (start, end) {\n  this.firstAttachedItem = Math.max(0, start);\n  if (!this.hasMore) {\n    end = Math.min(end, this.items.length);\n  }\n  this.lastAttachedItem = end;\n  this.attachContent();\n};\n\nInfiniteScroller.prototype.maybeRequestContent = function () {\n  var _this3 = this;\n\n  if (this.requestInProgress || !this.hasMore) {\n    return;\n  }\n  var itemsNeeded = this.lastAttachedItem - this.loadedItems;\n  if (itemsNeeded <= 0) {\n    return;\n  }\n  this.requestInProgress = true;\n  this.options.fetch(itemsNeeded).then(function (items) {\n    _this3.requestInProgress = false;\n    if (items) {\n      _this3.addContent(items);\n    } else {\n      _this3.hasMore = false;\n      var tombstoneLen = _this3._removeTombstones();\n      var curPos = 0;\n      if (_this3.anchorItem.index <= _this3.items.length) {\n        curPos = _this3._fixScrollPosition();\n        _this3._setupAnimations({}, curPos);\n        _this3.scroller.resetPosition(_this3.scroller.options.bounceTime);\n      } else {\n        _this3.anchorItem.index -= tombstoneLen;\n        curPos = _this3._fixScrollPosition();\n        _this3._setupAnimations({}, curPos);\n        _this3.scroller.stop();\n        _this3.scroller.resetPosition();\n        _this3.onScroll();\n      }\n    }\n  });\n};\n\nInfiniteScroller.prototype.addContent = function (items) {\n  for (var i = 0; i < items.length; i++) {\n    if (this.items.length <= this.loadedItems) {\n      this._addItem();\n    }\n    this.items[this.loadedItems++].data = items[i];\n  }\n  this.attachContent();\n  this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.attachContent = function () {\n  var unusedNodes = this._collectUnusedNodes();\n  var tombstoneAnimations = this._createDOMNodes(unusedNodes);\n  this._cleanupUnusedNodes(unusedNodes);\n  this._cacheNodeSize();\n  var curPos = this._fixScrollPosition();\n  this._setupAnimations(tombstoneAnimations, curPos);\n};\n\nInfiniteScroller.prototype.resetMore = function () {\n  this.hasMore = true;\n};\n\nInfiniteScroller.prototype._removeTombstones = function () {\n  var markIndex = void 0;\n  var tombstoneLen = 0;\n  var itemLen = this.items.length;\n  for (var i = 0; i < itemLen; i++) {\n    var currentNode = this.items[i].node;\n    var currentData = this.items[i].data;\n    if ((!currentNode || isTombstoneNode(currentNode)) && !currentData) {\n      // 0 should be excluded\n      if (markIndex === void 0) {\n        markIndex = i;\n      }\n      if (currentNode) {\n        this.scrollerEl.removeChild(currentNode);\n      }\n    }\n  }\n  tombstoneLen = itemLen - markIndex;\n  this.items.splice(markIndex);\n  this.lastAttachedItem = Math.min(this.lastAttachedItem, this.items.length);\n  return tombstoneLen;\n};\n\nInfiniteScroller.prototype._collectUnusedNodes = function () {\n  var unusedNodes = [];\n  for (var i = 0; i < this.items.length; i++) {\n    // Skip the items which should be visible.\n    if (i === this.firstAttachedItem) {\n      i = this.lastAttachedItem - 1;\n      continue;\n    }\n    var currentNode = this.items[i].node;\n    if (currentNode) {\n      if (isTombstoneNode(currentNode)) {\n        // Cache tombstones for reuse\n        this.tombstones.push(currentNode);\n        this.tombstones[this.tombstones.length - 1].style.display = 'none';\n      } else {\n        unusedNodes.push(currentNode);\n      }\n    }\n    this.items[i].node = null;\n  }\n  return unusedNodes;\n};\n\nInfiniteScroller.prototype._createDOMNodes = function (unusedNodes) {\n  var tombstoneAnimations = {};\n  for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n    while (this.items.length <= i) {\n      this._addItem();\n    }\n    var currentNode = this.items[i].node;\n    var currentData = this.items[i].data;\n    if (currentNode) {\n      if (isTombstoneNode(currentNode) && currentData) {\n        currentNode.style.zIndex = 1;\n        tombstoneAnimations[i] = [currentNode, this.items[i].top - this.anchorScrollTop];\n        this.items[i].node = null;\n      } else {\n        continue;\n      }\n    }\n    var node = currentData ? this.options.render(currentData, unusedNodes.pop()) : this._getTombStone();\n    node.style.position = 'absolute';\n    this.items[i].top = -1;\n    this.scrollerEl.appendChild(node);\n    this.items[i].node = node;\n  }\n  return tombstoneAnimations;\n};\n\nInfiniteScroller.prototype._cleanupUnusedNodes = function (unusedNodes) {\n  while (unusedNodes.length) {\n    this.scrollerEl.removeChild(unusedNodes.pop());\n  }\n};\n\nInfiniteScroller.prototype._cacheNodeSize = function () {\n  for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n    var item = this.items[i];\n    // Only cache the height if we have the real contents, not a placeholder.\n    if (item.data && !item.height) {\n      var isTombstone = isTombstoneNode(item.node);\n      item.height = isTombstone ? this.tombstoneHeight : item.node.offsetHeight;\n      item.width = isTombstone ? this.tombstoneWidth : item.node.offsetWidth;\n    }\n  }\n};\n\nInfiniteScroller.prototype._fixScrollPosition = function () {\n  this.anchorScrollTop = 0;\n  for (var _i = 0; _i < this.anchorItem.index; _i++) {\n    this.anchorScrollTop += this.items[_i].height || this.tombstoneHeight;\n  }\n  this.anchorScrollTop += this.anchorItem.offset;\n\n  // Position all nodes.\n  var curPos = this.anchorScrollTop - this.anchorItem.offset;\n  var i = this.anchorItem.index;\n  while (i > this.firstAttachedItem) {\n    curPos -= this.items[i - 1].height || this.tombstoneHeight;\n    i--;\n  }\n\n  return curPos;\n};\n\nInfiniteScroller.prototype._setupAnimations = function (tombstoneAnimations, curPos) {\n  var _this4 = this;\n\n  for (var i in tombstoneAnimations) {\n    var animation = tombstoneAnimations[i];\n    this.items[i].node.style[style.transform] = 'translateY(' + (this.anchorScrollTop + animation[1]) + 'px) scale(' + this.tombstoneWidth / this.items[i].width + ', ' + this.tombstoneHeight / this.items[i].height + ')';\n    // Call offsetTop on the nodes to be animated to force them to apply current transforms.\n    /* eslint-disable no-unused-expressions */\n    this.items[i].node.offsetTop;\n    animation[0].offsetTop;\n    this.items[i].node.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms';\n  }\n\n  for (var _i2 = this.firstAttachedItem; _i2 < this.lastAttachedItem; _i2++) {\n    var _animation = tombstoneAnimations[_i2];\n    if (_animation) {\n      var tombstoneNode = _animation[0];\n      tombstoneNode.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms, opacity ' + ANIMATION_DURATION_MS + 'ms';\n      tombstoneNode.style[style.transform] = 'translateY(' + curPos + 'px) scale(' + this.items[_i2].width / this.tombstoneWidth + ', ' + this.items[_i2].height / this.tombstoneHeight + ')';\n      tombstoneNode.style.opacity = 0;\n    }\n    if (curPos !== this.items[_i2].top) {\n      if (!_animation) {\n        this.items[_i2].node.style[style.transition] = '';\n      }\n      this.items[_i2].node.style[style.transform] = 'translateY(' + curPos + 'px)';\n    }\n    this.items[_i2].top = curPos;\n    curPos += this.items[_i2].height || this.tombstoneHeight;\n  }\n\n  this.scroller.maxScrollY = -(curPos - this.scroller.wrapperHeight + (this.hasMore ? DEFAULT_SCROLL_RUNWAY : 0));\n\n  var tombstoneAnimationsHandler = setTimeout(function () {\n    for (var _i3 in tombstoneAnimations) {\n      var _animation2 = tombstoneAnimations[_i3];\n      _animation2[0].style.display = 'none';\n      // Tombstone can be recycled now.\n      _this4.tombstones.push(_animation2[0]);\n    }\n  }, ANIMATION_DURATION_MS);\n\n  this.tombstonesAnimationHandlers.push(tombstoneAnimationsHandler);\n};\n\nInfiniteScroller.prototype._getTombStone = function () {\n  var tombstone = this.tombstones.pop();\n  if (tombstone) {\n    tombstone.style.display = '';\n    tombstone.style.opacity = 1;\n    tombstone.style[style.transform] = '';\n    tombstone.style[style.transition] = '';\n    return tombstone;\n  }\n  return this.options.createTombstone();\n};\n\nInfiniteScroller.prototype._addItem = function () {\n  this.items.push({\n    data: null,\n    node: null,\n    height: 0,\n    width: 0,\n    top: 0\n  });\n};\n\nInfiniteScroller.prototype._calculateAnchoredItem = function (initialAnchor, delta) {\n  if (delta === 0) {\n    return initialAnchor;\n  }\n  var i = initialAnchor.index;\n  var tombstones = 0;\n\n  delta += initialAnchor.offset;\n  if (delta < 0) {\n    while (delta < 0 && i > 0 && this.items[i - 1].height) {\n      delta += this.items[i - 1].height;\n      i--;\n    }\n    tombstones = Math.max(-i, Math.ceil(Math.min(delta, 0) / this.tombstoneHeight));\n  } else {\n    while (delta > 0 && i < this.items.length && this.items[i].height && this.items[i].height < delta) {\n      delta -= this.items[i].height;\n      i++;\n    }\n    if (i >= this.items.length || !this.items[i].height) {\n      tombstones = Math.floor(Math.max(delta, 0) / this.tombstoneHeight);\n    }\n  }\n  i += tombstones;\n  delta -= tombstones * this.tombstoneHeight;\n\n  return {\n    index: i,\n    offset: delta\n  };\n};\n\nfunction BScroll(el, options) {\n  this.wrapper = typeof el === 'string' ? document.querySelector(el) : el;\n  if (!this.wrapper) {\n    warn('Can not resolve the wrapper DOM.');\n  }\n  this.scroller = this.wrapper.children[0];\n  if (!this.scroller) {\n    warn('The wrapper need at least one child element to be scroller.');\n  }\n  // cache style for better performance\n  this.scrollerStyle = this.scroller.style;\n\n  this._init(options);\n}\n\ninitMixin(BScroll);\ncoreMixin(BScroll);\neventMixin(BScroll);\nsnapMixin(BScroll);\nwheelMixin(BScroll);\nscrollbarMixin(BScroll);\npullDownMixin(BScroll);\npullUpMixin(BScroll);\nmouseWheelMixin(BScroll);\nzoomMixin(BScroll);\ninfiniteMixin(BScroll);\n\nBScroll.Version = '1.15.1';\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BScroll);\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__range__ = __webpack_require__(1);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ([Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(0, 23, true, '点'), Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(0, 59, true, '分'), Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(0, 59, true, '秒')]);\n\n/***/ }),\n/* 12 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return dateAnchor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return dateData; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__range__ = __webpack_require__(1);\n\n\nvar START_YEAR = 1900;\nvar END_YEAR = 2100;\n\nvar UNIT_YEAR = '年';\nvar UNIT_MONTH = '月';\nvar UNIT_DAY = '日';\n\nfunction isLeapYear(y) {\n  return y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0);\n};\n\nfunction getDays(y, m) {\n  y = Number(y);\n  m = Number(m);\n  var endDay = null;\n  switch (m) {\n    case 2:\n      endDay = isLeapYear(y) ? 29 : 28;break;\n    case 1:\n    case 3:\n    case 5:\n    case 7:\n    case 8:\n    case 10:\n    case 12:\n      endDay = 31;break;\n    case 4:\n    case 6:\n    case 9:\n    case 11:\n    default:\n      endDay = 30;break;\n  }\n  var days = Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(1, endDay, false, UNIT_DAY);\n  return days.map(function (day) {\n    return { value: day };\n  });\n};\n\nvar yearData = Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(START_YEAR, END_YEAR, false, UNIT_YEAR);\nvar monthData = Object(__WEBPACK_IMPORTED_MODULE_0__range__[\"a\" /* default */])(1, 12, false, UNIT_MONTH);\n\nvar cascadeMonthData = monthData.map(function (month) {\n  return {\n    value: month,\n    children: []\n  };\n});\n\nvar dateData = yearData.map(function (year) {\n  var item = {\n    value: year,\n    children: cascadeMonthData.slice()\n  };\n  item.children.forEach(function (month) {\n    month.children = getDays(year.slice(0, -1), month.value.slice(0, -1));\n  });\n  return item;\n});\n\nvar date = new Date();\nvar dateAnchor = [{ value: '' + date.getFullYear() + UNIT_YEAR }, { value: '' + (date.getMonth() + 1) + UNIT_MONTH }, { value: '' + date.getDate() + UNIT_DAY }];\n\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nvar render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"mask\",on:{\"click\":_vm.hide}})]),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"slide\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"picker\"},[_c('div',{staticClass:\"picker-title\"},[_c('span',{staticClass:\"pt-cancel\",style:({ color: _vm.colorCancel }),on:{\"click\":_vm.cancel}},[_vm._v(_vm._s(_vm.textCancel))]),_vm._v(\" \"),_c('span',{staticClass:\"pt-submit\",style:({ color: _vm.colorConfirm }),on:{\"click\":_vm.confirm}},[_vm._v(_vm._s(_vm.textConfirm))]),_vm._v(\" \"),_vm._t(\"default\")],2),_vm._v(\" \"),_c('div',{staticClass:\"picker-panel\"},[_c('div',{staticClass:\"picker-mask-top\"}),_vm._v(\" \"),_c('div',{staticClass:\"picker-mask-bottom\"}),_vm._v(\" \"),_c('div',{ref:\"wheelWrapper\",staticClass:\"picker-wheel-wrapper\"},_vm._l((_vm.pickerData),function(wheel,index){return _c('div',{key:index,staticClass:\"picker-wheel\"},[_c('ul',{staticClass:\"wheel-scroll\"},_vm._l((wheel),function(item,index){return _c('li',{key:index,staticClass:\"wheel-item\"},[_vm._v(_vm._s(item))])}),0)])}),0)])])])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\n/* harmony default export */ __webpack_exports__[\"a\"] = (esExports);\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// vue-awesome-picker.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"dist/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0fafbab0ccbb16e3b6bf","<template>\n  <div>\n    <transition name=\"fade\">\n      <div class=\"mask\" v-show=\"display\" @click=\"hide\"></div>\n    </transition>\n    <transition name=\"slide\">\n      <div class=\"picker\" v-show=\"display\">\n      <div class=\"picker-title\">\n        <span class=\"pt-cancel\" @click=\"cancel\" :style=\"{ color: colorCancel }\">{{textCancel}}</span>\n        <span class=\"pt-submit\" @click=\"confirm\" :style=\"{ color: colorConfirm }\">{{textConfirm}}</span>\n\t\t<slot></slot>\n      </div>\n      <div class=\"picker-panel\">\n        <div class=\"picker-mask-top\"></div>\n        <div class=\"picker-mask-bottom\"></div>\n        <div class=\"picker-wheel-wrapper\" ref=\"wheelWrapper\">\n          <div class=\"picker-wheel\" v-for=\"(wheel, index) in pickerData\" :key=\"index\">\n            <ul class=\"wheel-scroll\">\n              <li class=\"wheel-item\" v-for=\"(item, index) in wheel\" :key=\"index\">{{item}}</li>\n            </ul>\n          </div>\n        </div>\n      </div>\n    </div>\n    </transition>\n  </div>\n</template>\n\n<script>\nimport BScroll from 'better-scroll'\nimport timeData from './data/time.js'\nimport { dateData, dateAnchor } from './data/date.js'\n\nconst DATA_NORMAL = 'normal'\nconst DATA_CASCADE = 'cascade'\n\nconst TYPE_NORMAL = 'normal'\nconst TYPE_TIME = 'time'\nconst TYPE_DATE = 'date'\n\nconst TEXT_TITLE = ''\nconst TEXT_CONFIRM = '确定'\nconst TEXT_CANCEL = '取消'\n\nconst COLOR_TITLE = '#000000'\nconst COLOR_CONFIRM = '#42b983'\nconst COLOR_CANCEL = '#999999'\n\nconst EVENT_CONFIRM = 'confirm'\nconst EVENT_CANCEL = 'cancel'\n\nexport default {\n  name: 'awesome-picker',\n  props: {\n    data: {\n      type: Array,\n      default () {\n        return []\n      }\n    },\n    anchor: {\n      type: Array,\n      default () {\n        return []\n      }\n    },\n    type: {\n      type: String,\n      default: TYPE_NORMAL\n    },\n    textTitle: {\n      type: String,\n      default: TEXT_TITLE\n    },\n    textConfirm: {\n      type: String,\n      default: TEXT_CONFIRM\n    },\n    textCancel: {\n      type: String,\n      default: TEXT_CANCEL\n    },\n    colorTitle: {\n      type: String,\n      default: COLOR_TITLE\n    },\n    colorConfirm: {\n      type: String,\n      default: COLOR_CONFIRM\n    },\n    colorCancel: {\n      type: String,\n      default: COLOR_CANCEL\n    },\n    swipeTime: {\n      type: Number,\n      default: 1800\n    }\n  },\n  data () {\n    return {\n      display: false,\n      dataChange: false,\n      pickerData: this._dataGetter(),\n      pickerAnchor: this._anchorGetter(),\n      wheels: []\n    }\n  },\n  watch: {\n    data () {\n      this._setPickerData()\n    }\n  },\n  computed: {\n    proxyData () {\n      return this._dataGetter()\n    },\n    proxyAnchor () {\n      return this._anchorGetter()\n    },\n    dataType () {\n      return !Array.isArray(this.proxyData[0]) ? DATA_CASCADE : DATA_NORMAL\n    }\n  },\n  methods: {\n    _dataGetter () {\n      let data = null\n      switch (this.type) {\n        case TYPE_TIME:\n          data = timeData; break\n        case TYPE_DATE:\n          data = dateData; break\n        case TYPE_NORMAL:\n        default:\n          data = this.data; break\n      }\n      return [...data]\n    },\n\n    _anchorGetter () {\n      let anchor = []\n      if (this.anchor.length) {\n        anchor = this.anchor\n      } else {\n        switch (this.type) {\n          case TYPE_DATE:\n            anchor = dateAnchor; break\n          default:\n            anchor = this.anchor; break\n        }\n      }\n\n      anchor = anchor.map((item, i) => {\n        let index = 0\n        if (item.index) {\n          index = item.index\n        } else if (item.value) {\n          index = this.pickerData && this.pickerData[i] && this.pickerData[i].indexOf(item.value) > -1\n            ? this.pickerData[i].indexOf(item.value) : 0\n        } else {\n          index = item\n        }\n        return index\n      })\n      return [...anchor]\n    },\n\n    show () {\n      this.display = true\n      if (!this.wheels.length || this.dataChange) {\n        this.dataType === DATA_CASCADE && this._updatePickerData()\n        this.$nextTick(() => {\n          const wheelWrapper = this.$refs.wheelWrapper\n          this.pickerData.forEach((item, index) => {\n            this._createWheel(wheelWrapper, index).enable()\n          })\n          this._wheelToAnchor(this.proxyAnchor)\n\n          this.dataChange && this._destroyExtraWheels()\n          this.dataChange = false\n        })\n      } else {\n        this.wheels.forEach((wheel) => {\n          wheel.enable()\n        })\n      }\n    },\n\n    hide () {\n      this.wheels.forEach((wheel) => {\n        wheel.disable()\n      })\n      this.display = false\n    },\n\n    _createWheel (wheelWrapper, i) {\n      if (!this.wheels[i]) {\n        const wheel = this.wheels[i] = new BScroll(wheelWrapper.children[i], {\n          wheel: {\n            selectedIndex: 0,\n            rotate: 25\n          },\n          swipeTime: this.swipeTime\n        })\n        wheel.on('scrollEnd', () => {\n\t\tconsole.log('i',i)\n          this._cascadePickerChange(i)\n        })\n      } else {\n        this.wheels[i].refresh()\n      }\n      return this.wheels[i]\n    },\n\n    _cascadePickerChange (i) {\n      if (this.dataType !== DATA_CASCADE) {\n        return\n      }\n      const newIndex = this._getCurrentValue()[i].index\n      if (newIndex !== this.pickerAnchor[i]) {\n        this.pickerAnchor.splice(i, 1, newIndex)\n        this._updatePickerData(i + 1)\n      }\n    },\n\n    _wheelToAnchor (data) {\n      this.wheels.forEach((wheel, i) => {\n        wheel.wheelTo(data[i] || 0)\n      })\n    },\n\n    _getCurrentValue () {\n      const value = []\n      this.wheels.forEach((wheel, i) => {\n        const j = wheel.getSelectedIndex()\n        value.push({\n          index: j,\n          value: this.pickerData[i][j]\n        })\n      })\n      return value\n    },\n\n    _setPickerData () {\n      this.pickerData = this._dataGetter()\n      this.pickerAnchor = this._anchorGetter()\n      if (this.display) {\n\t\tif(this.dataType==DATA_CASCADE){\n\t\t\tthis._updatePickerData()\n\t\t  }\n        this.$nextTick(() => {\n          const wheelWrapper = this.$refs.wheelWrapper\n          this.pickerData.forEach((item, i) => {\n            this._createWheel(wheelWrapper, i)\n          })\n\t\t  this._destroyExtraWheels()\n          this._wheelToAnchor(this.proxyAnchor)\n        })\n      } else {\n        this.dataChange = true\n      }\n    },\n\n    _destroyExtraWheels () {\n      const dataLength = this.pickerData.length\n      if (dataLength < this.wheels.length) {\n        const extraWheels = this.wheels.splice(dataLength)\n        extraWheels.forEach((wheel) => {\n          wheel.destroy()\n        })\n      }\n    },\n\n    _updatePickerData (wheelIndex = 0) {\n      let data = [...this.proxyData]\n      let i = 0\n\t  wheelIndex=0\n      while (data) {\n        if (i >= wheelIndex) {\n          let wheelData = []\n          data.forEach((item) => {\n            wheelData.push(item.value)\n          })\n          this.pickerData[i] = wheelData\n          this.pickerAnchor[i] = wheelIndex === 0\n            ? (this.pickerAnchor[i] < data.length ? this.pickerAnchor[i] || 0 : 0)\n            : this._reloadWheel(i, wheelData)\n        }\n        data = data.length ? data[this.pickerAnchor[i]].children : null\n        i++\n      }\n      this.pickerData = this.pickerData.slice(0, i)\n    },\n\n    _reloadWheel (index, data) {\n      const wheelWrapper = this.$refs.wheelWrapper\n      let scroll = wheelWrapper.children[index].querySelector('.wheel-scroll')\n      let wheel = this.wheels ? this.wheels[index] : false\n      let dist = 0\n      if (scroll && wheel) {\n        this.$set(this.pickerData, index, data)\n        this.pickerAnchor[index] = dist\n        this.$nextTick(() => {\n          wheel = this._createWheel(wheelWrapper, index)\n          wheel.wheelTo(dist)\n        })\n      }\n      return dist\n    },\n\n    confirm () {\n      const isInTransition = this.wheels.some((wheel) => {\n        return wheel.isInTransition\n      })\n      if (isInTransition) {\n        return\n      }\n      const selectedValues = this._getCurrentValue()\n      this.$emit(EVENT_CONFIRM, selectedValues)\n      this.hide()\n    },\n\n    cancel () {\n      this.$emit(EVENT_CANCEL)\n      this.hide()\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n  /* fade */\n  .fade-enter, .fade-leave-to {\n    opacity: 0;\n  }\n\n  .fade-enter-active, .fade-leave-active {\n    transition: all .3s ease;\n  }\n\n  /* slide */\n  .slide-enter, .slide-leave-to {\n    opacity: 0.5;\n    transform: translate3d(0, 270px, 0)\n  }\n\n  .slide-enter-active, .slide-leave-active {\n    transition: all .3s ease;\n  }\n\n  .mask {\n    position: fixed;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    z-index: 9999;\n    background: rgba(0,0,0,.2);\n  }\n\n  .picker {\n    position: fixed;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    height: 270px;\n    z-index: 10000;\n    background: #fff;\n  }\n\n  .picker-title {\n    position: relative;\n    height: 44px;\n    color: #333;\n\n    &:after {\n      content: '';\n      display: block;\n      border-bottom: 1px solid #ebebeb;\n      left: 0;\n      right: 0;\n      transform: scaleY(.5);\n    }\n\n    span {\n      position: absolute;\n      height: 44px;\n      line-height: 44px;\n      padding: 0 12px;\n      font-size: 14px;\n    }\n\n    .pt-cancel {\n      left: 0;\n      color: #999;\n    }\n\n    .pt-submit {\n      right: 0;\n      color: #42b983;\n    }\n\n    h4 {\n      margin: 0;\n      font-size: 16px;\n      font-weight: normal;\n      height: 44px;\n      line-height: 44px;\n      text-align: center;\n    }\n  }\n\n  .picker-panel {\n    position: relative;\n    height: 226px;\n    padding: 24px 12px;\n    box-sizing: border-box;\n\n    .picker-mask-top, .picker-mask-bottom {\n      position: absolute;\n      left: 0;\n      right: 0;\n      height: 72px;\n      background: #fff;\n      transform: translateZ(0);\n      z-index: 1;\n      pointer-events: none;\n    }\n\n    .picker-mask-top {\n      top: 24px;\n      background: linear-gradient(to bottom, rgba(255,255,255,.9), rgba(255,255,255,.5));\n\n      &:after {\n        content: '';\n        display: block;\n        position: absolute;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        border-bottom: 1px solid #ebebeb;\n        transform: scaleY(.5);\n      }\n    }\n\n    .picker-mask-bottom {\n      bottom: 24px;\n      background: linear-gradient(to top, rgba(255,255,255,.9), rgba(255,255,255,.5));\n\n      &:before {\n        content: '';\n        display: block;\n        position: absolute;\n        left: 0;\n        right: 0;\n        top: 0;\n        border-bottom: 1px solid #ebebeb;\n        transform: scaleY(.5);\n      }\n    }\n  }\n\n  .picker-wheel-wrapper {\n    display: flex;\n    align-items: stretch;\n    height: 100%;\n\n    .picker-wheel {\n      flex: 1;\n      overflow: hidden;\n    }\n\n    .wheel-scroll {\n      margin-top: 72px;\n\n      .wheel-item {\n        height: 34px;\n        line-height: 34px;\n        font-size: 17px;\n        text-align: center;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        color: #333;\n      }\n    }\n  }\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/lib/vue-awesome-picker.vue","export default function (n, m, polyfill = false, unit = '') {\n  let arr = []\n  for (let i = n; i <= m; i++) {\n    let value = (polyfill && i < 10 ? '0' + i : i) + unit\n    arr.push(value)\n  }\n  return arr\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/data/range.js","import AwesomePicker from './vue-awesome-picker.vue'\nconst picker = {\n  install (Vue) {\n    Vue.component(AwesomePicker.name, AwesomePicker)\n  }\n}\nif (typeof window !== 'undefined' && window.Vue) {\n  window.Vue.use(picker)\n}\nexport default picker\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/index.js","function injectStyle (ssrContext) {\n  require(\"!!vue-style-loader!css-loader!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-d86a61f6\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!sass-loader!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector?type=styles&index=0!./vue-awesome-picker.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector?type=script&index=0!./vue-awesome-picker.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector?type=script&index=0!./vue-awesome-picker.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-d86a61f6\\\",\\\"hasScoped\\\":true,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector?type=template&index=0!./vue-awesome-picker.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-d86a61f6\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n  __vue_script__,\n  __vue_template__,\n  __vue_template_functional__,\n  __vue_styles__,\n  __vue_scopeId__,\n  __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/lib/vue-awesome-picker.vue\n// module id = 3\n// module chunks = 0","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../node_modules/_css-loader@0.28.11@css-loader/index.js!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/style-compiler/index.js?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-d86a61f6\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/_sass-loader@6.0.7@sass-loader/lib/loader.js!../../node_modules/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=styles&index=0!./vue-awesome-picker.vue\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar update = require(\"!../../node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/addStylesClient.js\")(\"77d5ecd4\", content, true, {});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-style-loader@3.1.2@vue-style-loader!./node_modules/_css-loader@0.28.11@css-loader!./node_modules/_vue-loader@13.7.3@vue-loader/lib/style-compiler?{\"vue\":true,\"id\":\"data-v-d86a61f6\",\"scoped\":true,\"hasInlineConfig\":false}!./node_modules/_sass-loader@6.0.7@sass-loader/lib/loader.js!./node_modules/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=styles&index=0!./src/lib/vue-awesome-picker.vue\n// module id = 4\n// module chunks = 0","exports = module.exports = require(\"../../node_modules/_css-loader@0.28.11@css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".fade-enter[data-v-d86a61f6],.fade-leave-to[data-v-d86a61f6]{opacity:0}.fade-enter-active[data-v-d86a61f6],.fade-leave-active[data-v-d86a61f6]{transition:all .3s ease}.slide-enter[data-v-d86a61f6],.slide-leave-to[data-v-d86a61f6]{opacity:.5;transform:translate3d(0,270px,0)}.slide-enter-active[data-v-d86a61f6],.slide-leave-active[data-v-d86a61f6]{transition:all .3s ease}.mask[data-v-d86a61f6]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:rgba(0,0,0,.2)}.picker[data-v-d86a61f6]{position:fixed;left:0;right:0;bottom:0;height:270px;z-index:10000;background:#fff}.picker-title[data-v-d86a61f6]{position:relative;height:44px;color:#333}.picker-title[data-v-d86a61f6]:after{content:\\\"\\\";display:block;border-bottom:1px solid #ebebeb;left:0;right:0;transform:scaleY(.5)}.picker-title span[data-v-d86a61f6]{position:absolute;height:44px;line-height:44px;padding:0 12px;font-size:14px}.picker-title .pt-cancel[data-v-d86a61f6]{left:0;color:#999}.picker-title .pt-submit[data-v-d86a61f6]{right:0;color:#42b983}.picker-title h4[data-v-d86a61f6]{margin:0;font-size:16px;font-weight:400;height:44px;line-height:44px;text-align:center}.picker-panel[data-v-d86a61f6]{position:relative;height:226px;padding:24px 12px;box-sizing:border-box}.picker-panel .picker-mask-bottom[data-v-d86a61f6],.picker-panel .picker-mask-top[data-v-d86a61f6]{position:absolute;left:0;right:0;height:72px;background:#fff;transform:translateZ(0);z-index:1;pointer-events:none}.picker-panel .picker-mask-top[data-v-d86a61f6]{top:24px;background:linear-gradient(180deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.5))}.picker-panel .picker-mask-top[data-v-d86a61f6]:after{content:\\\"\\\";display:block;position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid #ebebeb;transform:scaleY(.5)}.picker-panel .picker-mask-bottom[data-v-d86a61f6]{bottom:24px;background:linear-gradient(0deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.5))}.picker-panel .picker-mask-bottom[data-v-d86a61f6]:before{content:\\\"\\\";display:block;position:absolute;left:0;right:0;top:0;border-bottom:1px solid #ebebeb;transform:scaleY(.5)}.picker-wheel-wrapper[data-v-d86a61f6]{display:flex;align-items:stretch;height:100%}.picker-wheel-wrapper .picker-wheel[data-v-d86a61f6]{flex:1;overflow:hidden}.picker-wheel-wrapper .wheel-scroll[data-v-d86a61f6]{margin-top:72px}.picker-wheel-wrapper .wheel-scroll .wheel-item[data-v-d86a61f6]{height:34px;line-height:34px;font-size:17px;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333}\", \"\"]);\n\n// exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_css-loader@0.28.11@css-loader!./node_modules/_vue-loader@13.7.3@vue-loader/lib/style-compiler?{\"vue\":true,\"id\":\"data-v-d86a61f6\",\"scoped\":true,\"hasInlineConfig\":false}!./node_modules/_sass-loader@6.0.7@sass-loader/lib/loader.js!./node_modules/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=styles&index=0!./src/lib/vue-awesome-picker.vue\n// module id = 5\n// module chunks = 0","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t//  when a module is imported multiple times with different media queries.\n\t\t\t//  I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_css-loader@0.28.11@css-loader/lib/css-base.js\n// module id = 6\n// module chunks = 0","/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n  Modified by Evan You @yyx990803\n*/\n\nvar hasDocument = typeof document !== 'undefined'\n\nif (typeof DEBUG !== 'undefined' && DEBUG) {\n  if (!hasDocument) {\n    throw new Error(\n    'vue-style-loader cannot be used in a non-browser environment. ' +\n    \"Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.\"\n  ) }\n}\n\nvar listToStyles = require('./listToStyles')\n\n/*\ntype StyleObject = {\n  id: number;\n  parts: Array<StyleObjectPart>\n}\n\ntype StyleObjectPart = {\n  css: string;\n  media: string;\n  sourceMap: ?string\n}\n*/\n\nvar stylesInDom = {/*\n  [id: number]: {\n    id: number,\n    refs: number,\n    parts: Array<(obj?: StyleObjectPart) => void>\n  }\n*/}\n\nvar head = hasDocument && (document.head || document.getElementsByTagName('head')[0])\nvar singletonElement = null\nvar singletonCounter = 0\nvar isProduction = false\nvar noop = function () {}\nvar options = null\nvar ssrIdKey = 'data-vue-ssr-id'\n\n// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n// tags it will allow on a page\nvar isOldIE = typeof navigator !== 'undefined' && /msie [6-9]\\b/.test(navigator.userAgent.toLowerCase())\n\nmodule.exports = function (parentId, list, _isProduction, _options) {\n  isProduction = _isProduction\n\n  options = _options || {}\n\n  var styles = listToStyles(parentId, list)\n  addStylesToDom(styles)\n\n  return function update (newList) {\n    var mayRemove = []\n    for (var i = 0; i < styles.length; i++) {\n      var item = styles[i]\n      var domStyle = stylesInDom[item.id]\n      domStyle.refs--\n      mayRemove.push(domStyle)\n    }\n    if (newList) {\n      styles = listToStyles(parentId, newList)\n      addStylesToDom(styles)\n    } else {\n      styles = []\n    }\n    for (var i = 0; i < mayRemove.length; i++) {\n      var domStyle = mayRemove[i]\n      if (domStyle.refs === 0) {\n        for (var j = 0; j < domStyle.parts.length; j++) {\n          domStyle.parts[j]()\n        }\n        delete stylesInDom[domStyle.id]\n      }\n    }\n  }\n}\n\nfunction addStylesToDom (styles /* Array<StyleObject> */) {\n  for (var i = 0; i < styles.length; i++) {\n    var item = styles[i]\n    var domStyle = stylesInDom[item.id]\n    if (domStyle) {\n      domStyle.refs++\n      for (var j = 0; j < domStyle.parts.length; j++) {\n        domStyle.parts[j](item.parts[j])\n      }\n      for (; j < item.parts.length; j++) {\n        domStyle.parts.push(addStyle(item.parts[j]))\n      }\n      if (domStyle.parts.length > item.parts.length) {\n        domStyle.parts.length = item.parts.length\n      }\n    } else {\n      var parts = []\n      for (var j = 0; j < item.parts.length; j++) {\n        parts.push(addStyle(item.parts[j]))\n      }\n      stylesInDom[item.id] = { id: item.id, refs: 1, parts: parts }\n    }\n  }\n}\n\nfunction createStyleElement () {\n  var styleElement = document.createElement('style')\n  styleElement.type = 'text/css'\n  head.appendChild(styleElement)\n  return styleElement\n}\n\nfunction addStyle (obj /* StyleObjectPart */) {\n  var update, remove\n  var styleElement = document.querySelector('style[' + ssrIdKey + '~=\"' + obj.id + '\"]')\n\n  if (styleElement) {\n    if (isProduction) {\n      // has SSR styles and in production mode.\n      // simply do nothing.\n      return noop\n    } else {\n      // has SSR styles but in dev mode.\n      // for some reason Chrome can't handle source map in server-rendered\n      // style tags - source maps in <style> only works if the style tag is\n      // created and inserted dynamically. So we remove the server rendered\n      // styles and inject new ones.\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  if (isOldIE) {\n    // use singleton mode for IE9.\n    var styleIndex = singletonCounter++\n    styleElement = singletonElement || (singletonElement = createStyleElement())\n    update = applyToSingletonTag.bind(null, styleElement, styleIndex, false)\n    remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true)\n  } else {\n    // use multi-style-tag mode in all other cases\n    styleElement = createStyleElement()\n    update = applyToTag.bind(null, styleElement)\n    remove = function () {\n      styleElement.parentNode.removeChild(styleElement)\n    }\n  }\n\n  update(obj)\n\n  return function updateStyle (newObj /* StyleObjectPart */) {\n    if (newObj) {\n      if (newObj.css === obj.css &&\n          newObj.media === obj.media &&\n          newObj.sourceMap === obj.sourceMap) {\n        return\n      }\n      update(obj = newObj)\n    } else {\n      remove()\n    }\n  }\n}\n\nvar replaceText = (function () {\n  var textStore = []\n\n  return function (index, replacement) {\n    textStore[index] = replacement\n    return textStore.filter(Boolean).join('\\n')\n  }\n})()\n\nfunction applyToSingletonTag (styleElement, index, remove, obj) {\n  var css = remove ? '' : obj.css\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = replaceText(index, css)\n  } else {\n    var cssNode = document.createTextNode(css)\n    var childNodes = styleElement.childNodes\n    if (childNodes[index]) styleElement.removeChild(childNodes[index])\n    if (childNodes.length) {\n      styleElement.insertBefore(cssNode, childNodes[index])\n    } else {\n      styleElement.appendChild(cssNode)\n    }\n  }\n}\n\nfunction applyToTag (styleElement, obj) {\n  var css = obj.css\n  var media = obj.media\n  var sourceMap = obj.sourceMap\n\n  if (media) {\n    styleElement.setAttribute('media', media)\n  }\n  if (options.ssrId) {\n    styleElement.setAttribute(ssrIdKey, obj.id)\n  }\n\n  if (sourceMap) {\n    // https://developer.chrome.com/devtools/docs/javascript-debugging\n    // this makes source maps inside style tags work properly in Chrome\n    css += '\\n/*# sourceURL=' + sourceMap.sources[0] + ' */'\n    // http://stackoverflow.com/a/26603875\n    css += '\\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'\n  }\n\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild)\n    }\n    styleElement.appendChild(document.createTextNode(css))\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/addStylesClient.js\n// module id = 7\n// module chunks = 0","/**\n * Translates the list format produced by css-loader into something\n * easier to manipulate.\n */\nmodule.exports = function listToStyles (parentId, list) {\n  var styles = []\n  var newStyles = {}\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i]\n    var id = item[0]\n    var css = item[1]\n    var media = item[2]\n    var sourceMap = item[3]\n    var part = {\n      id: parentId + ':' + i,\n      css: css,\n      media: media,\n      sourceMap: sourceMap\n    }\n    if (!newStyles[id]) {\n      styles.push(newStyles[id] = { id: id, parts: [part] })\n    } else {\n      newStyles[id].parts.push(part)\n    }\n  }\n  return styles\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-style-loader@3.1.2@vue-style-loader/lib/listToStyles.js\n// module id = 8\n// module chunks = 0","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file.\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nmodule.exports = function normalizeComponent (\n  rawScriptExports,\n  compiledTemplate,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier /* server only */\n) {\n  var esModule\n  var scriptExports = rawScriptExports = rawScriptExports || {}\n\n  // ES6 modules interop\n  var type = typeof rawScriptExports.default\n  if (type === 'object' || type === 'function') {\n    esModule = rawScriptExports\n    scriptExports = rawScriptExports.default\n  }\n\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (compiledTemplate) {\n    options.render = compiledTemplate.render\n    options.staticRenderFns = compiledTemplate.staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = injectStyles\n  }\n\n  if (hook) {\n    var functional = options.functional\n    var existing = functional\n      ? options.render\n      : options.beforeCreate\n\n    if (!functional) {\n      // inject component registration as beforeCreate hook\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    } else {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functioal component in vue file\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return existing(h, context)\n      }\n    }\n  }\n\n  return {\n    esModule: esModule,\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-loader@13.7.3@vue-loader/lib/component-normalizer.js\n// module id = 9\n// module chunks = 0","/*!\n * better-normal-scroll v1.15.1\n * (c) 2016-2019 ustbhuangyi\n * Released under the MIT License.\n */\n// As of V8 6.6, depending on the size of the array, this is anywhere\n// between 1.5-10x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++) {\n    list[index] = list[index + 1];\n  }\n\n  list.pop();\n}\n\nvar slicedToArray = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if (Symbol.iterator in Object(arr)) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\nfunction eventMixin(BScroll) {\n  BScroll.prototype.on = function (type, fn) {\n    var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n    if (!this._events[type]) {\n      this._events[type] = [];\n    }\n\n    this._events[type].push([fn, context]);\n  };\n\n  BScroll.prototype.once = function (type, fn) {\n    var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;\n\n    function magic() {\n      this.off(type, magic);\n\n      fn.apply(context, arguments);\n    }\n    // To expose the corresponding function method in order to execute the off method\n    magic.fn = fn;\n\n    this.on(type, magic);\n  };\n\n  BScroll.prototype.off = function (type, fn) {\n    var _events = this._events[type];\n    if (!_events) {\n      return;\n    }\n\n    var count = _events.length;\n    while (count--) {\n      if (_events[count][0] === fn || _events[count][0] && _events[count][0].fn === fn) {\n        spliceOne(_events, count);\n      }\n    }\n  };\n\n  BScroll.prototype.trigger = function (type) {\n    var events = this._events[type];\n    if (!events) {\n      return;\n    }\n\n    var len = events.length;\n    var eventsCopy = [].concat(toConsumableArray(events));\n    for (var i = 0; i < len; i++) {\n      var event = eventsCopy[i];\n\n      var _event = slicedToArray(event, 2),\n          fn = _event[0],\n          context = _event[1];\n\n      if (fn) {\n        fn.apply(context, [].slice.call(arguments, 1));\n      }\n    }\n  };\n}\n\n// ssr support\nvar inBrowser = typeof window !== 'undefined';\nvar ua = inBrowser && navigator.userAgent.toLowerCase();\nvar isWeChatDevTools = ua && /wechatdevtools/.test(ua);\nvar isAndroid = ua && ua.indexOf('android') > 0;\n\nfunction getNow() {\n  return window.performance && window.performance.now ? window.performance.now() + window.performance.timing.navigationStart : +new Date();\n}\n\nfunction extend(target) {\n  for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    rest[_key - 1] = arguments[_key];\n  }\n\n  for (var i = 0; i < rest.length; i++) {\n    var source = rest[i];\n    for (var key in source) {\n      target[key] = source[key];\n    }\n  }\n  return target;\n}\n\nfunction isUndef(v) {\n  return v === undefined || v === null;\n}\n\nfunction getDistance(x, y) {\n  return Math.sqrt(x * x + y * y);\n}\n\nvar elementStyle = inBrowser && document.createElement('div').style;\n\nvar vendor = function () {\n  if (!inBrowser) {\n    return false;\n  }\n  // first pick up standard to fix #743\n  var transformNames = {\n    standard: 'transform',\n    webkit: 'webkitTransform',\n    Moz: 'MozTransform',\n    O: 'OTransform',\n    ms: 'msTransform'\n  };\n\n  for (var key in transformNames) {\n    if (elementStyle[transformNames[key]] !== undefined) {\n      return key;\n    }\n  }\n\n  return false;\n}();\n\nfunction prefixStyle(style) {\n  if (vendor === false) {\n    return false;\n  }\n\n  if (vendor === 'standard') {\n    if (style === 'transitionEnd') {\n      return 'transitionend';\n    }\n    return style;\n  }\n\n  return vendor + style.charAt(0).toUpperCase() + style.substr(1);\n}\n\nfunction addEvent(el, type, fn, capture) {\n  el.addEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction removeEvent(el, type, fn, capture) {\n  el.removeEventListener(type, fn, { passive: false, capture: !!capture });\n}\n\nfunction offset(el) {\n  var left = 0;\n  var top = 0;\n\n  while (el) {\n    left -= el.offsetLeft;\n    top -= el.offsetTop;\n    el = el.offsetParent;\n  }\n\n  return {\n    left: left,\n    top: top\n  };\n}\n\nfunction offsetToBody(el) {\n  var rect = el.getBoundingClientRect();\n\n  return {\n    left: -(rect.left + window.pageXOffset),\n    top: -(rect.top + window.pageYOffset)\n  };\n}\n\nvar cssVendor = vendor && vendor !== 'standard' ? '-' + vendor.toLowerCase() + '-' : '';\n\nvar transform = prefixStyle('transform');\nvar transition = prefixStyle('transition');\n\nvar hasPerspective = inBrowser && prefixStyle('perspective') in elementStyle;\n// fix issue #361\nvar hasTouch = inBrowser && ('ontouchstart' in window || isWeChatDevTools);\nvar hasTransform = transform !== false;\nvar hasTransition = inBrowser && transition in elementStyle;\n\nvar style = {\n  transform: transform,\n  transition: transition,\n  transitionTimingFunction: prefixStyle('transitionTimingFunction'),\n  transitionDuration: prefixStyle('transitionDuration'),\n  transitionDelay: prefixStyle('transitionDelay'),\n  transformOrigin: prefixStyle('transformOrigin'),\n  transitionEnd: prefixStyle('transitionEnd')\n};\n\nvar TOUCH_EVENT = 1;\nvar MOUSE_EVENT = 2;\n\nvar eventType = {\n  touchstart: TOUCH_EVENT,\n  touchmove: TOUCH_EVENT,\n  touchend: TOUCH_EVENT,\n\n  mousedown: MOUSE_EVENT,\n  mousemove: MOUSE_EVENT,\n  mouseup: MOUSE_EVENT\n};\n\nfunction getRect(el) {\n  if (el instanceof window.SVGElement) {\n    var rect = el.getBoundingClientRect();\n    return {\n      top: rect.top,\n      left: rect.left,\n      width: rect.width,\n      height: rect.height\n    };\n  } else {\n    return {\n      top: el.offsetTop,\n      left: el.offsetLeft,\n      width: el.offsetWidth,\n      height: el.offsetHeight\n    };\n  }\n}\n\nfunction preventDefaultException(el, exceptions) {\n  for (var i in exceptions) {\n    if (exceptions[i].test(el[i])) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction tap(e, eventName) {\n  var ev = document.createEvent('Event');\n  ev.initEvent(eventName, true, true);\n  ev.pageX = e.pageX;\n  ev.pageY = e.pageY;\n  e.target.dispatchEvent(ev);\n}\n\nfunction click(e) {\n  var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'click';\n\n  var eventSource = void 0;\n  if (e.type === 'mouseup' || e.type === 'mousecancel') {\n    eventSource = e;\n  } else if (e.type === 'touchend' || e.type === 'touchcancel') {\n    eventSource = e.changedTouches[0];\n  }\n  var posSrc = {};\n  if (eventSource) {\n    posSrc.screenX = eventSource.screenX || 0;\n    posSrc.screenY = eventSource.screenY || 0;\n    posSrc.clientX = eventSource.clientX || 0;\n    posSrc.clientY = eventSource.clientY || 0;\n  }\n  var ev = void 0;\n  var bubbles = true;\n  var cancelable = true;\n  if (typeof MouseEvent !== 'undefined') {\n    try {\n      ev = new MouseEvent(event, extend({\n        bubbles: bubbles,\n        cancelable: cancelable\n      }, posSrc));\n    } catch (e) {\n      createEvent();\n    }\n  } else {\n    createEvent();\n  }\n\n  function createEvent() {\n    ev = document.createEvent('Event');\n    ev.initEvent(event, bubbles, cancelable);\n    extend(ev, posSrc);\n  }\n\n  // forwardedTouchEvent set to true in case of the conflict with fastclick\n  ev.forwardedTouchEvent = true;\n  ev._constructed = true;\n  e.target.dispatchEvent(ev);\n}\n\nfunction dblclick(e) {\n  click(e, 'dblclick');\n}\n\nfunction prepend(el, target) {\n  if (target.firstChild) {\n    before(el, target.firstChild);\n  } else {\n    target.appendChild(el);\n  }\n}\n\nfunction before(el, target) {\n  target.parentNode.insertBefore(el, target);\n}\n\nfunction removeChild(el, child) {\n  el.removeChild(child);\n}\n\nvar DEFAULT_OPTIONS = {\n  startX: 0,\n  startY: 0,\n  scrollX: false,\n  scrollY: true,\n  freeScroll: false,\n  directionLockThreshold: 5,\n  eventPassthrough: '',\n  click: false,\n  tap: false,\n  /**\n   * support any side\n   * bounce: {\n   *   top: true,\n   *   bottom: true,\n   *   left: true,\n   *   right: true\n   * }\n   */\n  bounce: true,\n  bounceTime: 800,\n  momentum: true,\n  momentumLimitTime: 300,\n  momentumLimitDistance: 15,\n  swipeTime: 2500,\n  swipeBounceTime: 500,\n  deceleration: 0.0015,\n  flickLimitTime: 200,\n  flickLimitDistance: 100,\n  resizePolling: 60,\n  probeType: 0,\n  preventDefault: true,\n  preventDefaultException: {\n    tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/\n  },\n  HWCompositing: true,\n  useTransition: true,\n  useTransform: true,\n  bindToWrapper: false,\n  disableMouse: hasTouch,\n  disableTouch: !hasTouch,\n  observeDOM: true,\n  autoBlur: true,\n  /**\n   * for picker\n   * wheel: {\n   *   selectedIndex: 0,\n   *   rotate: 25,\n   *   adjustTime: 400\n   *   wheelWrapperClass: 'wheel-scroll',\n   *   wheelItemClass: 'wheel-item'\n   * }\n   */\n  wheel: false,\n  /**\n   * for slide\n   * snap: {\n   *   loop: false,\n   *   el: domEl,\n   *   threshold: 0.1,\n   *   stepX: 100,\n   *   stepY: 100,\n   *   speed: 400,\n   *   easing: {\n   *     style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n   *     fn: function (t) {\n   *       return t * (2 - t)\n   *     }\n   *   }\n   *   listenFlick: true\n   * }\n   */\n  snap: false,\n  /**\n   * for scrollbar\n   * scrollbar: {\n   *   fade: true,\n   *   interactive: false\n   * }\n   */\n  scrollbar: false,\n  /**\n   * for pull down and refresh\n   * pullDownRefresh: {\n   *   threshold: 50,\n   *   stop: 20\n   * }\n   */\n  pullDownRefresh: false,\n  /**\n   * for pull up and load\n   * pullUpLoad: {\n   *   threshold: 50\n   * }\n   */\n  pullUpLoad: false,\n  /**\n   * for mouse wheel\n   * mouseWheel: {\n   *   speed: 20,\n   *   invert: false,\n   *   easeTime: 300\n   * }\n   */\n  mouseWheel: false,\n  stopPropagation: false,\n  /**\n   * for zoom\n   * zoom: {\n   *   start: 1,\n   *   min: 1,\n   *   max: 4\n   * }\n   */\n  zoom: false,\n  /**\n   * for infinity\n   * infinity: {\n   *   render(item, div) {\n   *   },\n   *   createTombstone() {\n   *   },\n   *   fetch(count) {\n   *   }\n   * }\n   */\n  infinity: false,\n  /**\n   * for double click\n   * dblclick: {\n   *   delay: 300\n   * }\n   */\n  dblclick: false\n};\n\nfunction initMixin(BScroll) {\n  BScroll.prototype._init = function (options) {\n    this._handleOptions(options);\n\n    // init private custom events\n    this._events = {};\n\n    this.x = 0;\n    this.y = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n\n    this.setScale(1);\n\n    this._addDOMEvents();\n\n    this._initExtFeatures();\n\n    this._watchTransition();\n\n    if (this.options.observeDOM) {\n      this._initDOMObserver();\n    }\n\n    if (this.options.autoBlur) {\n      this._handleAutoBlur();\n    }\n\n    this.refresh();\n\n    if (!this.options.snap) {\n      this.scrollTo(this.options.startX, this.options.startY);\n    }\n\n    this.enable();\n  };\n\n  BScroll.prototype.setScale = function (scale) {\n    this.lastScale = isUndef(this.scale) ? scale : this.scale;\n    this.scale = scale;\n  };\n\n  BScroll.prototype._handleOptions = function (options) {\n    this.options = extend({}, DEFAULT_OPTIONS, options);\n\n    this.translateZ = this.options.HWCompositing && hasPerspective ? ' translateZ(0)' : '';\n\n    this.options.useTransition = this.options.useTransition && hasTransition;\n    this.options.useTransform = this.options.useTransform && hasTransform;\n\n    this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;\n\n    // If you want eventPassthrough I have to lock one of the axes\n    this.options.scrollX = this.options.eventPassthrough === 'horizontal' ? false : this.options.scrollX;\n    this.options.scrollY = this.options.eventPassthrough === 'vertical' ? false : this.options.scrollY;\n\n    // With eventPassthrough we also need lockDirection mechanism\n    this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;\n    this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;\n\n    if (this.options.tap === true) {\n      this.options.tap = 'tap';\n    }\n  };\n\n  BScroll.prototype._addDOMEvents = function () {\n    var eventOperation = addEvent;\n    this._handleDOMEvents(eventOperation);\n  };\n\n  BScroll.prototype._removeDOMEvents = function () {\n    var eventOperation = removeEvent;\n    this._handleDOMEvents(eventOperation);\n  };\n\n  BScroll.prototype._handleDOMEvents = function (eventOperation) {\n    var target = this.options.bindToWrapper ? this.wrapper : window;\n    eventOperation(window, 'orientationchange', this);\n    eventOperation(window, 'resize', this);\n\n    if (this.options.click) {\n      eventOperation(this.wrapper, 'click', this, true);\n    }\n\n    if (!this.options.disableMouse) {\n      eventOperation(this.wrapper, 'mousedown', this);\n      eventOperation(target, 'mousemove', this);\n      eventOperation(target, 'mousecancel', this);\n      eventOperation(target, 'mouseup', this);\n    }\n\n    if (hasTouch && !this.options.disableTouch) {\n      eventOperation(this.wrapper, 'touchstart', this);\n      eventOperation(target, 'touchmove', this);\n      eventOperation(target, 'touchcancel', this);\n      eventOperation(target, 'touchend', this);\n    }\n\n    eventOperation(this.scroller, style.transitionEnd, this);\n  };\n\n  BScroll.prototype._initExtFeatures = function () {\n    if (this.options.snap) {\n      this._initSnap();\n    }\n    if (this.options.scrollbar) {\n      this._initScrollbar();\n    }\n    if (this.options.pullUpLoad) {\n      this._initPullUp();\n    }\n    if (this.options.pullDownRefresh) {\n      this._initPullDown();\n    }\n    if (this.options.wheel) {\n      this._initWheel();\n    }\n    if (this.options.mouseWheel) {\n      this._initMouseWheel();\n    }\n    if (this.options.zoom) {\n      this._initZoom();\n    }\n    if (this.options.infinity) {\n      this._initInfinite();\n    }\n  };\n\n  BScroll.prototype._watchTransition = function () {\n    if (typeof Object.defineProperty !== 'function') {\n      return;\n    }\n    var me = this;\n    var isInTransition = false;\n    var key = this.options.useTransition ? 'isInTransition' : 'isAnimating';\n    Object.defineProperty(this, key, {\n      get: function get() {\n        return isInTransition;\n      },\n      set: function set(newVal) {\n        isInTransition = newVal;\n        // fix issue #359\n        var el = me.scroller.children.length ? me.scroller.children : [me.scroller];\n        var pointerEvents = isInTransition && !me.pulling ? 'none' : 'auto';\n        for (var i = 0; i < el.length; i++) {\n          el[i].style.pointerEvents = pointerEvents;\n        }\n      }\n    });\n  };\n\n  BScroll.prototype._handleAutoBlur = function () {\n    this.on('scrollStart', function () {\n      var activeElement = document.activeElement;\n      if (activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA')) {\n        activeElement.blur();\n      }\n    });\n  };\n\n  BScroll.prototype._initDOMObserver = function () {\n    var _this = this;\n\n    if (typeof MutationObserver !== 'undefined') {\n      var timer = void 0;\n      var observer = new MutationObserver(function (mutations) {\n        // don't do any refresh during the transition, or outside of the boundaries\n        if (_this._shouldNotRefresh()) {\n          return;\n        }\n        var immediateRefresh = false;\n        var deferredRefresh = false;\n        for (var i = 0; i < mutations.length; i++) {\n          var mutation = mutations[i];\n          if (mutation.type !== 'attributes') {\n            immediateRefresh = true;\n            break;\n          } else {\n            if (mutation.target !== _this.scroller) {\n              deferredRefresh = true;\n              break;\n            }\n          }\n        }\n        if (immediateRefresh) {\n          _this.refresh();\n        } else if (deferredRefresh) {\n          // attributes changes too often\n          clearTimeout(timer);\n          timer = setTimeout(function () {\n            if (!_this._shouldNotRefresh()) {\n              _this.refresh();\n            }\n          }, 60);\n        }\n      });\n      var config = {\n        attributes: true,\n        childList: true,\n        subtree: true\n      };\n      observer.observe(this.scroller, config);\n\n      this.on('destroy', function () {\n        observer.disconnect();\n      });\n    } else {\n      this._checkDOMUpdate();\n    }\n  };\n\n  BScroll.prototype._shouldNotRefresh = function () {\n    var outsideBoundaries = this.x > this.minScrollX || this.x < this.maxScrollX || this.y > this.minScrollY || this.y < this.maxScrollY;\n\n    return this.isInTransition || this.stopFromTransition || outsideBoundaries;\n  };\n\n  BScroll.prototype._checkDOMUpdate = function () {\n    var scrollerRect = getRect(this.scroller);\n    var oldWidth = scrollerRect.width;\n    var oldHeight = scrollerRect.height;\n\n    function check() {\n      if (this.destroyed) {\n        return;\n      }\n      scrollerRect = getRect(this.scroller);\n      var newWidth = scrollerRect.width;\n      var newHeight = scrollerRect.height;\n\n      if (oldWidth !== newWidth || oldHeight !== newHeight) {\n        this.refresh();\n      }\n      oldWidth = newWidth;\n      oldHeight = newHeight;\n\n      next.call(this);\n    }\n\n    function next() {\n      var _this2 = this;\n\n      setTimeout(function () {\n        check.call(_this2);\n      }, 1000);\n    }\n\n    next.call(this);\n  };\n\n  BScroll.prototype.handleEvent = function (e) {\n    switch (e.type) {\n      case 'touchstart':\n      case 'mousedown':\n        this._start(e);\n        if (this.options.zoom && e.touches && e.touches.length > 1) {\n          this._zoomStart(e);\n        }\n        break;\n      case 'touchmove':\n      case 'mousemove':\n        if (this.options.zoom && e.touches && e.touches.length > 1) {\n          this._zoom(e);\n        } else {\n          this._move(e);\n        }\n        break;\n      case 'touchend':\n      case 'mouseup':\n      case 'touchcancel':\n      case 'mousecancel':\n        if (this.scaled) {\n          this._zoomEnd(e);\n        } else {\n          this._end(e);\n        }\n        break;\n      case 'orientationchange':\n      case 'resize':\n        this._resize();\n        break;\n      case 'transitionend':\n      case 'webkitTransitionEnd':\n      case 'oTransitionEnd':\n      case 'MSTransitionEnd':\n        this._transitionEnd(e);\n        break;\n      case 'click':\n        if (this.enabled && !e._constructed) {\n          if (!preventDefaultException(e.target, this.options.preventDefaultException)) {\n            e.preventDefault();\n            e.stopPropagation();\n          }\n        }\n        break;\n      case 'wheel':\n      case 'DOMMouseScroll':\n      case 'mousewheel':\n        this._onMouseWheel(e);\n        break;\n    }\n  };\n\n  BScroll.prototype.refresh = function () {\n    var isWrapperStatic = window.getComputedStyle(this.wrapper, null).position === 'static';\n    var wrapperRect = getRect(this.wrapper);\n    this.wrapperWidth = wrapperRect.width;\n    this.wrapperHeight = wrapperRect.height;\n\n    var scrollerRect = getRect(this.scroller);\n    this.scrollerWidth = Math.round(scrollerRect.width * this.scale);\n    this.scrollerHeight = Math.round(scrollerRect.height * this.scale);\n\n    this.relativeX = scrollerRect.left;\n    this.relativeY = scrollerRect.top;\n\n    if (isWrapperStatic) {\n      this.relativeX -= wrapperRect.left;\n      this.relativeY -= wrapperRect.top;\n    }\n\n    this.minScrollX = 0;\n    this.minScrollY = 0;\n\n    var wheel = this.options.wheel;\n    if (wheel) {\n      this.items = this.scroller.children;\n      // check whether there are all disable items or not when refresh\n      this._checkWheelAllDisabled();\n      this.options.itemHeight = this.itemHeight = this.items.length ? this.scrollerHeight / this.items.length : 0;\n      if (this.selectedIndex === undefined) {\n        this.selectedIndex = wheel.selectedIndex || 0;\n      }\n      this.options.startY = -this.selectedIndex * this.itemHeight;\n\n      this.maxScrollX = 0;\n      this.maxScrollY = -this.itemHeight * (this.items.length - 1);\n    } else {\n      this.maxScrollX = this.wrapperWidth - this.scrollerWidth;\n      if (!this.options.infinity) {\n        this.maxScrollY = this.wrapperHeight - this.scrollerHeight;\n      }\n      if (this.maxScrollX < 0) {\n        this.maxScrollX -= this.relativeX;\n        this.minScrollX = -this.relativeX;\n      } else if (this.scale > 1) {\n        this.maxScrollX = this.maxScrollX / 2 - this.relativeX;\n        this.minScrollX = this.maxScrollX;\n      }\n      if (this.maxScrollY < 0) {\n        this.maxScrollY -= this.relativeY;\n        this.minScrollY = -this.relativeY;\n      } else if (this.scale > 1) {\n        this.maxScrollY = this.maxScrollY / 2 - this.relativeY;\n        this.minScrollY = this.maxScrollY;\n      }\n    }\n\n    this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < this.minScrollX;\n    this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < this.minScrollY;\n\n    if (!this.hasHorizontalScroll) {\n      this.maxScrollX = this.minScrollX;\n      this.scrollerWidth = this.wrapperWidth;\n    }\n\n    if (!this.hasVerticalScroll) {\n      this.maxScrollY = this.minScrollY;\n      this.scrollerHeight = this.wrapperHeight;\n    }\n\n    this.endTime = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n    this.wrapperOffset = offset(this.wrapper);\n\n    this.trigger('refresh');\n\n    !this.scaled && this.resetPosition();\n  };\n\n  BScroll.prototype.enable = function () {\n    this.enabled = true;\n  };\n\n  BScroll.prototype.disable = function () {\n    this.enabled = false;\n  };\n}\n\nvar ease = {\n  // easeOutQuint\n  swipe: {\n    style: 'cubic-bezier(0.23, 1, 0.32, 1)',\n    fn: function fn(t) {\n      return 1 + --t * t * t * t * t;\n    }\n  },\n  // easeOutQuard\n  swipeBounce: {\n    style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\n    fn: function fn(t) {\n      return t * (2 - t);\n    }\n  },\n  // easeOutQuart\n  bounce: {\n    style: 'cubic-bezier(0.165, 0.84, 0.44, 1)',\n    fn: function fn(t) {\n      return 1 - --t * t * t * t;\n    }\n  }\n};\n\nfunction momentum(current, start, time, lowerMargin, upperMargin, wrapperSize, options, scroll) {\n  var distance = current - start;\n  var speed = Math.abs(distance) / time;\n\n  var deceleration = options.deceleration,\n      itemHeight = options.itemHeight,\n      swipeBounceTime = options.swipeBounceTime,\n      wheel = options.wheel,\n      swipeTime = options.swipeTime;\n\n  var duration = swipeTime;\n  var rate = wheel ? 4 : 15;\n\n  var destination = current + speed / deceleration * (distance < 0 ? -1 : 1);\n\n  if (wheel && itemHeight) {\n    destination = scroll._findNearestValidWheel(destination).y;\n  }\n\n  if (destination < lowerMargin) {\n    destination = wrapperSize ? Math.max(lowerMargin - wrapperSize / 4, lowerMargin - wrapperSize / rate * speed) : lowerMargin;\n    duration = swipeBounceTime;\n  } else if (destination > upperMargin) {\n    destination = wrapperSize ? Math.min(upperMargin + wrapperSize / 4, upperMargin + wrapperSize / rate * speed) : upperMargin;\n    duration = swipeBounceTime;\n  }\n\n  return {\n    destination: Math.round(destination),\n    duration: duration\n  };\n}\n\nvar DEFAULT_INTERVAL = 100 / 60;\n\nfunction noop() {}\n\nvar requestAnimationFrame = function () {\n  if (!inBrowser) {\n    /* istanbul ignore if */\n    return noop;\n  }\n  return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||\n  // if all else fails, use setTimeout\n  function (callback) {\n    return window.setTimeout(callback, (callback.interval || DEFAULT_INTERVAL) / 2); // make interval as precise as possible.\n  };\n}();\n\nvar cancelAnimationFrame = function () {\n  if (!inBrowser) {\n    /* istanbul ignore if */\n    return noop;\n  }\n  return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (id) {\n    window.clearTimeout(id);\n  };\n}();\n\nvar DIRECTION_UP = 1;\nvar DIRECTION_DOWN = -1;\nvar DIRECTION_LEFT = 1;\nvar DIRECTION_RIGHT = -1;\n\nvar PROBE_DEBOUNCE = 1;\n\nvar PROBE_REALTIME = 3;\n\nfunction warn(msg) {\n  console.error('[BScroll warn]: ' + msg);\n}\n\nfunction assert(condition, msg) {\n  if (!condition) {\n    throw new Error('[BScroll] ' + msg);\n  }\n}\n\nfunction coreMixin(BScroll) {\n  BScroll.prototype._start = function (e) {\n    var _eventType = eventType[e.type];\n    if (_eventType !== TOUCH_EVENT) {\n      if (e.button !== 0) {\n        return;\n      }\n    }\n    if (!this.enabled || this.destroyed || this.initiated && this.initiated !== _eventType) {\n      return;\n    }\n    this.initiated = _eventType;\n\n    if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.moved = false;\n    this.distX = 0;\n    this.distY = 0;\n    this.directionX = 0;\n    this.directionY = 0;\n    this.movingDirectionX = 0;\n    this.movingDirectionY = 0;\n    this.directionLocked = 0;\n\n    this._transitionTime();\n    this.startTime = getNow();\n\n    if (this.options.wheel) {\n      this.target = e.target;\n    }\n\n    this.stop();\n\n    var point = e.touches ? e.touches[0] : e;\n\n    this.startX = this.x;\n    this.startY = this.y;\n    this.absStartX = this.x;\n    this.absStartY = this.y;\n    this.pointX = point.pageX;\n    this.pointY = point.pageY;\n\n    this.trigger('beforeScrollStart');\n  };\n\n  BScroll.prototype._move = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    var point = e.touches ? e.touches[0] : e;\n    var deltaX = point.pageX - this.pointX;\n    var deltaY = point.pageY - this.pointY;\n\n    this.pointX = point.pageX;\n    this.pointY = point.pageY;\n\n    this.distX += deltaX;\n    this.distY += deltaY;\n\n    var absDistX = Math.abs(this.distX);\n    var absDistY = Math.abs(this.distY);\n\n    var timestamp = getNow();\n\n    // We need to move at least momentumLimitDistance pixels for the scrolling to initiate\n    if (timestamp - this.endTime > this.options.momentumLimitTime && !this.moved && absDistY < this.options.momentumLimitDistance && absDistX < this.options.momentumLimitDistance) {\n      return;\n    }\n\n    // If you are scrolling in one direction lock the other\n    if (!this.directionLocked && !this.options.freeScroll) {\n      if (absDistX > absDistY + this.options.directionLockThreshold) {\n        this.directionLocked = 'h'; // lock horizontally\n      } else if (absDistY >= absDistX + this.options.directionLockThreshold) {\n        this.directionLocked = 'v'; // lock vertically\n      } else {\n        this.directionLocked = 'n'; // no lock\n      }\n    }\n\n    if (this.directionLocked === 'h') {\n      if (this.options.eventPassthrough === 'vertical') {\n        e.preventDefault();\n      } else if (this.options.eventPassthrough === 'horizontal') {\n        this.initiated = false;\n        return;\n      }\n      deltaY = 0;\n    } else if (this.directionLocked === 'v') {\n      if (this.options.eventPassthrough === 'horizontal') {\n        e.preventDefault();\n      } else if (this.options.eventPassthrough === 'vertical') {\n        this.initiated = false;\n        return;\n      }\n      deltaX = 0;\n    }\n\n    deltaX = this.hasHorizontalScroll ? deltaX : 0;\n    deltaY = this.hasVerticalScroll ? deltaY : 0;\n    this.movingDirectionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n    this.movingDirectionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n    var newX = this.x + deltaX;\n    var newY = this.y + deltaY;\n\n    var top = false;\n    var bottom = false;\n    var left = false;\n    var right = false;\n    // Slow down or stop if outside of the boundaries\n    var bounce = this.options.bounce;\n    if (bounce !== false) {\n      top = bounce.top === undefined ? true : bounce.top;\n      bottom = bounce.bottom === undefined ? true : bounce.bottom;\n      left = bounce.left === undefined ? true : bounce.left;\n      right = bounce.right === undefined ? true : bounce.right;\n    }\n    if (newX > this.minScrollX || newX < this.maxScrollX) {\n      if (newX > this.minScrollX && left || newX < this.maxScrollX && right) {\n        newX = this.x + deltaX / 3;\n      } else {\n        newX = newX > this.minScrollX ? this.minScrollX : this.maxScrollX;\n      }\n    }\n    if (newY > this.minScrollY || newY < this.maxScrollY) {\n      if (newY > this.minScrollY && top || newY < this.maxScrollY && bottom) {\n        newY = this.y + deltaY / 3;\n      } else {\n        newY = newY > this.minScrollY ? this.minScrollY : this.maxScrollY;\n      }\n    }\n\n    if (!this.moved) {\n      this.moved = true;\n      this.trigger('scrollStart');\n    }\n\n    this._translate(newX, newY);\n\n    if (timestamp - this.startTime > this.options.momentumLimitTime) {\n      this.startTime = timestamp;\n      this.startX = this.x;\n      this.startY = this.y;\n\n      if (this.options.probeType === PROBE_DEBOUNCE) {\n        this.trigger('scroll', {\n          x: this.x,\n          y: this.y\n        });\n      }\n    }\n\n    if (this.options.probeType > PROBE_DEBOUNCE) {\n      this.trigger('scroll', {\n        x: this.x,\n        y: this.y\n      });\n    }\n\n    var scrollLeft = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft;\n    var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;\n\n    var pX = this.pointX - scrollLeft;\n    var pY = this.pointY - scrollTop;\n\n    if (pX > document.documentElement.clientWidth - this.options.momentumLimitDistance || pX < this.options.momentumLimitDistance || pY < this.options.momentumLimitDistance || pY > document.documentElement.clientHeight - this.options.momentumLimitDistance) {\n      this._end(e);\n    }\n  };\n\n  BScroll.prototype._end = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n    this.initiated = false;\n\n    if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n      e.preventDefault();\n    }\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.trigger('touchEnd', {\n      x: this.x,\n      y: this.y\n    });\n\n    this.isInTransition = false;\n\n    // ensures that the last position is rounded\n    var newX = Math.round(this.x);\n    var newY = Math.round(this.y);\n\n    var deltaX = newX - this.absStartX;\n    var deltaY = newY - this.absStartY;\n    this.directionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;\n    this.directionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;\n\n    // if configure pull down refresh, check it first\n    if (this.options.pullDownRefresh && this._checkPullDown()) {\n      return;\n    }\n\n    // check if it is a click operation\n    if (this._checkClick(e)) {\n      this.trigger('scrollCancel');\n      return;\n    }\n\n    // reset if we are outside of the boundaries\n    if (this.resetPosition(this.options.bounceTime, ease.bounce)) {\n      return;\n    }\n\n    this._translate(newX, newY);\n\n    this.endTime = getNow();\n    var duration = this.endTime - this.startTime;\n    var absDistX = Math.abs(newX - this.startX);\n    var absDistY = Math.abs(newY - this.startY);\n\n    // flick\n    if (this._events.flick && duration < this.options.flickLimitTime && absDistX < this.options.flickLimitDistance && absDistY < this.options.flickLimitDistance) {\n      this.trigger('flick');\n      return;\n    }\n\n    var time = 0;\n    // start momentum animation if needed\n    if (this.options.momentum && duration < this.options.momentumLimitTime && (absDistY > this.options.momentumLimitDistance || absDistX > this.options.momentumLimitDistance)) {\n      var top = false;\n      var bottom = false;\n      var left = false;\n      var right = false;\n      var bounce = this.options.bounce;\n      if (bounce !== false) {\n        top = bounce.top === undefined ? true : bounce.top;\n        bottom = bounce.bottom === undefined ? true : bounce.bottom;\n        left = bounce.left === undefined ? true : bounce.left;\n        right = bounce.right === undefined ? true : bounce.right;\n      }\n      var wrapperWidth = this.directionX === DIRECTION_RIGHT && left || this.directionX === DIRECTION_LEFT && right ? this.wrapperWidth : 0;\n      var wrapperHeight = this.directionY === DIRECTION_DOWN && top || this.directionY === DIRECTION_UP && bottom ? this.wrapperHeight : 0;\n      var momentumX = this.hasHorizontalScroll ? momentum(this.x, this.startX, duration, this.maxScrollX, this.minScrollX, wrapperWidth, this.options, this) : { destination: newX, duration: 0 };\n      var momentumY = this.hasVerticalScroll ? momentum(this.y, this.startY, duration, this.maxScrollY, this.minScrollY, wrapperHeight, this.options, this) : { destination: newY, duration: 0 };\n      newX = momentumX.destination;\n      newY = momentumY.destination;\n      time = Math.max(momentumX.duration, momentumY.duration);\n      this.isInTransition = true;\n    } else {\n      if (this.options.wheel) {\n        newY = this._findNearestValidWheel(newY).y;\n        time = this.options.wheel.adjustTime || 400;\n      }\n    }\n\n    var easing = ease.swipe;\n    if (this.options.snap) {\n      var snap = this._nearestSnap(newX, newY);\n      this.currentPage = snap;\n      time = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(newX - snap.x), 1000), Math.min(Math.abs(newY - snap.y), 1000)), 300);\n      newX = snap.x;\n      newY = snap.y;\n\n      this.directionX = 0;\n      this.directionY = 0;\n      easing = this.options.snap.easing || ease.bounce;\n    }\n\n    if (newX !== this.x || newY !== this.y) {\n      // change easing function when scroller goes out of the boundaries\n      if (newX > this.minScrollX || newX < this.maxScrollX || newY > this.minScrollY || newY < this.maxScrollY) {\n        easing = ease.swipeBounce;\n      }\n      this.scrollTo(newX, newY, time, easing);\n      return;\n    }\n\n    if (this.options.wheel) {\n      this.selectedIndex = this._findNearestValidWheel(this.y).index;\n    }\n\n    this.trigger('scrollEnd', {\n      x: this.x,\n      y: this.y\n    });\n  };\n\n  BScroll.prototype._checkClick = function (e) {\n    // when in the process of pulling down, it should not prevent click\n    var preventClick = this.stopFromTransition && !this.pulling;\n    this.stopFromTransition = false;\n\n    // we scrolled less than 15 pixels\n    if (!this.moved) {\n      if (this.options.wheel) {\n        if (this.target && this.target.className === this.options.wheel.wheelWrapperClass) {\n          var index = this._findNearestValidWheel(this.y).index;\n          var _offset = Math.round((this.pointY + offsetToBody(this.wrapper).top - this.wrapperHeight / 2) / this.itemHeight);\n          this.target = this.items[index + _offset];\n        }\n        var top = offset(this.target).top;\n        var left = offset(this.target).left;\n        top -= this.wrapperOffset.top;\n        top -= Math.round(this.target.offsetHeight / 2 - this.wrapper.offsetHeight / 2) || 0;\n        left -= this.wrapperOffset.left;\n        left -= Math.round(this.target.offsetWidth / 2 - this.wrapper.offsetWidth / 2) || 0;\n\n        top = this._findNearestValidWheel(top).y;\n        this.scrollTo(left, top, this.options.wheel.adjustTime || 400, ease.swipe);\n        return true;\n      } else {\n        if (!preventClick) {\n          var _dblclick = this.options.dblclick;\n          var dblclickTrigged = false;\n          if (_dblclick && this.lastClickTime) {\n            var _dblclick$delay = _dblclick.delay,\n                delay = _dblclick$delay === undefined ? 300 : _dblclick$delay;\n\n            if (getNow() - this.lastClickTime < delay) {\n              dblclickTrigged = true;\n              dblclick(e);\n            }\n          }\n          if (this.options.tap) {\n            tap(e, this.options.tap);\n          }\n\n          if (this.options.click && !preventDefaultException(e.target, this.options.preventDefaultException)) {\n            click(e);\n          }\n          this.lastClickTime = dblclickTrigged ? null : getNow();\n          return true;\n        }\n        return false;\n      }\n    }\n    return false;\n  };\n\n  BScroll.prototype._resize = function () {\n    var _this = this;\n\n    if (!this.enabled) {\n      return;\n    }\n    // fix a scroll problem under Android condition\n    if (isAndroid) {\n      this.wrapper.scrollTop = 0;\n    }\n    clearTimeout(this.resizeTimeout);\n    this.resizeTimeout = setTimeout(function () {\n      _this.refresh();\n    }, this.options.resizePolling);\n  };\n\n  BScroll.prototype._startProbe = function () {\n    cancelAnimationFrame(this.probeTimer);\n    this.probeTimer = requestAnimationFrame(probe);\n\n    var me = this;\n\n    function probe() {\n      var pos = me.getComputedPosition();\n      me.trigger('scroll', pos);\n      if (!me.isInTransition) {\n        me.trigger('scrollEnd', pos);\n        return;\n      }\n      me.probeTimer = requestAnimationFrame(probe);\n    }\n  };\n\n  BScroll.prototype._transitionTime = function () {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n    this.scrollerStyle[style.transitionDuration] = time + 'ms';\n\n    if (this.options.wheel) {\n      for (var i = 0; i < this.items.length; i++) {\n        this.items[i].style[style.transitionDuration] = time + 'ms';\n      }\n    }\n\n    if (this.indicators) {\n      for (var _i = 0; _i < this.indicators.length; _i++) {\n        this.indicators[_i].transitionTime(time);\n      }\n    }\n  };\n\n  BScroll.prototype._transitionTimingFunction = function (easing) {\n    this.scrollerStyle[style.transitionTimingFunction] = easing;\n\n    if (this.options.wheel) {\n      for (var i = 0; i < this.items.length; i++) {\n        this.items[i].style[style.transitionTimingFunction] = easing;\n      }\n    }\n\n    if (this.indicators) {\n      for (var _i2 = 0; _i2 < this.indicators.length; _i2++) {\n        this.indicators[_i2].transitionTimingFunction(easing);\n      }\n    }\n  };\n\n  BScroll.prototype._transitionEnd = function (e) {\n    if (e.target !== this.scroller || !this.isInTransition) {\n      return;\n    }\n\n    this._transitionTime();\n    var needReset = !this.pulling || this.movingDirectionY === DIRECTION_UP;\n    if (needReset && !this.resetPosition(this.options.bounceTime, ease.bounce)) {\n      this.isInTransition = false;\n      if (this.options.probeType !== PROBE_REALTIME) {\n        this.trigger('scrollEnd', {\n          x: this.x,\n          y: this.y\n        });\n      }\n    }\n  };\n\n  BScroll.prototype._translate = function (x, y, scale) {\n    assert(!isUndef(x) && !isUndef(y), 'Translate x or y is null or undefined.');\n    if (isUndef(scale)) {\n      scale = this.scale;\n    }\n    if (this.options.useTransform) {\n      this.scrollerStyle[style.transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')' + this.translateZ;\n    } else {\n      x = Math.round(x);\n      y = Math.round(y);\n      this.scrollerStyle.left = x + 'px';\n      this.scrollerStyle.top = y + 'px';\n    }\n\n    if (this.options.wheel) {\n      var _options$wheel$rotate = this.options.wheel.rotate,\n          rotate = _options$wheel$rotate === undefined ? 25 : _options$wheel$rotate;\n\n      for (var i = 0; i < this.items.length; i++) {\n        var deg = rotate * (y / this.itemHeight + i);\n        this.items[i].style[style.transform] = 'rotateX(' + deg + 'deg)';\n      }\n    }\n\n    this.x = x;\n    this.y = y;\n    this.setScale(scale);\n\n    if (this.indicators) {\n      for (var _i3 = 0; _i3 < this.indicators.length; _i3++) {\n        this.indicators[_i3].updatePosition();\n      }\n    }\n  };\n\n  BScroll.prototype._animate = function (destX, destY, duration, easingFn) {\n    var me = this;\n    var startX = this.x;\n    var startY = this.y;\n    var startScale = this.lastScale;\n    var destScale = this.scale;\n    var startTime = getNow();\n    var destTime = startTime + duration;\n\n    function step() {\n      var now = getNow();\n\n      if (now >= destTime) {\n        me.isAnimating = false;\n        me._translate(destX, destY, destScale);\n\n        me.trigger('scroll', {\n          x: me.x,\n          y: me.y\n        });\n\n        if (!me.pulling && !me.resetPosition(me.options.bounceTime)) {\n          me.trigger('scrollEnd', {\n            x: me.x,\n            y: me.y\n          });\n        }\n        return;\n      }\n      now = (now - startTime) / duration;\n      var easing = easingFn(now);\n      var newX = (destX - startX) * easing + startX;\n      var newY = (destY - startY) * easing + startY;\n      var newScale = (destScale - startScale) * easing + startScale;\n\n      me._translate(newX, newY, newScale);\n\n      if (me.isAnimating) {\n        me.animateTimer = requestAnimationFrame(step);\n      }\n\n      if (me.options.probeType === PROBE_REALTIME) {\n        me.trigger('scroll', {\n          x: me.x,\n          y: me.y\n        });\n      }\n    }\n\n    this.isAnimating = true;\n    cancelAnimationFrame(this.animateTimer);\n    step();\n  };\n\n  BScroll.prototype.scrollBy = function (x, y) {\n    var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n\n    x = this.x + x;\n    y = this.y + y;\n\n    this.scrollTo(x, y, time, easing);\n  };\n\n  BScroll.prototype.scrollTo = function (x, y) {\n    var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n    var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;\n    var isSilent = arguments[4];\n\n    if (this.options.wheel) {\n      y = this._findNearestValidWheel(y).y;\n    }\n    this.isInTransition = this.options.useTransition && time > 0 && (this.x !== x || this.y !== y);\n\n    if (!time || this.options.useTransition) {\n      this._transitionTimingFunction(easing.style);\n      this._transitionTime(time);\n      this._translate(x, y);\n\n      if (time && this.options.probeType === PROBE_REALTIME) {\n        this._startProbe();\n      }\n      if (!time && !isSilent) {\n        // don't trigger resetPosition when zoom feature is open, fix #748\n        if (this.options.zoom) return;\n        this.trigger('scroll', {\n          x: x,\n          y: y\n        });\n        // force reflow to put everything in position\n        this._reflow = document.body.offsetHeight;\n        if (!this.resetPosition(this.options.bounceTime, ease.bounce)) {\n          this.trigger('scrollEnd', {\n            x: x,\n            y: y\n          });\n        }\n      }\n\n      if (this.options.wheel) {\n        this.selectedIndex = this._findNearestValidWheel(y).index;\n      }\n    } else {\n      this._animate(x, y, time, easing.fn);\n    }\n  };\n\n  BScroll.prototype.scrollToElement = function (el, time, offsetX, offsetY, easing) {\n    if (!el) {\n      return;\n    }\n    el = el.nodeType ? el : this.scroller.querySelector(el);\n\n    if (this.options.wheel && !el.classList.contains(this.options.wheel.wheelItemClass)) {\n      return;\n    }\n\n    var pos = offset(el);\n    pos.left -= this.wrapperOffset.left;\n    pos.top -= this.wrapperOffset.top;\n\n    // if offsetX/Y are true we center the element to the screen\n    if (offsetX === true) {\n      offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);\n    }\n    if (offsetY === true) {\n      offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);\n    }\n\n    pos.left -= offsetX || 0;\n    pos.top -= offsetY || 0;\n    pos.left = pos.left > this.minScrollX ? this.minScrollX : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;\n    pos.top = pos.top > this.minScrollY ? this.minScrollY : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;\n\n    if (this.options.wheel) {\n      pos.top = this._findNearestValidWheel(pos.top).y;\n    }\n\n    this.scrollTo(pos.left, pos.top, time, easing);\n  };\n\n  BScroll.prototype.resetPosition = function () {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var easeing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ease.bounce;\n\n    var x = this.x;\n    var roundX = Math.round(x);\n    if (!this.hasHorizontalScroll || roundX > this.minScrollX) {\n      x = this.minScrollX;\n    } else if (roundX < this.maxScrollX) {\n      x = this.maxScrollX;\n    }\n\n    var y = this.y;\n    var roundY = Math.round(y);\n    if (!this.hasVerticalScroll || roundY > this.minScrollY) {\n      y = this.minScrollY;\n    } else if (roundY < this.maxScrollY) {\n      y = this.maxScrollY;\n    }\n\n    if (x === this.x && y === this.y) {\n      return false;\n    }\n\n    this.scrollTo(x, y, time, easeing);\n\n    return true;\n  };\n\n  BScroll.prototype.getComputedPosition = function () {\n    var matrix = window.getComputedStyle(this.scroller, null);\n    var x = void 0;\n    var y = void 0;\n\n    if (this.options.useTransform) {\n      matrix = matrix[style.transform].split(')')[0].split(', ');\n      x = +(matrix[12] || matrix[4]);\n      y = +(matrix[13] || matrix[5]);\n    } else {\n      x = +matrix.left.replace(/[^-\\d.]/g, '');\n      y = +matrix.top.replace(/[^-\\d.]/g, '');\n    }\n\n    return {\n      x: x,\n      y: y\n    };\n  };\n\n  BScroll.prototype.stop = function () {\n    if (this.options.useTransition && this.isInTransition) {\n      this.isInTransition = false;\n      cancelAnimationFrame(this.probeTimer);\n      var pos = this.getComputedPosition();\n      this._translate(pos.x, pos.y);\n      if (this.options.wheel) {\n        this.target = this.items[this._findNearestValidWheel(pos.y).index];\n      } else {\n        this.trigger('scrollEnd', {\n          x: this.x,\n          y: this.y\n        });\n      }\n      this.stopFromTransition = true;\n    } else if (!this.options.useTransition && this.isAnimating) {\n      this.isAnimating = false;\n      cancelAnimationFrame(this.animateTimer);\n      this.trigger('scrollEnd', {\n        x: this.x,\n        y: this.y\n      });\n      this.stopFromTransition = true;\n    }\n  };\n\n  BScroll.prototype.destroy = function () {\n    this.destroyed = true;\n    this.trigger('destroy');\n    if (this.options.useTransition) {\n      cancelAnimationFrame(this.probeTimer);\n    } else {\n      cancelAnimationFrame(this.animateTimer);\n    }\n    this._removeDOMEvents();\n    // remove custom events\n    this._events = {};\n  };\n}\n\nfunction snapMixin(BScroll) {\n  BScroll.prototype._initSnap = function () {\n    var _this = this;\n\n    this.currentPage = {};\n    var snap = this.options.snap;\n\n    if (snap.loop) {\n      var children = this.scroller.children;\n      if (children.length > 1) {\n        prepend(children[children.length - 1].cloneNode(true), this.scroller);\n        this.scroller.appendChild(children[1].cloneNode(true));\n      } else {\n        // Loop does not make any sense if there is only one child.\n        snap.loop = false;\n      }\n    }\n\n    var el = snap.el;\n    if (typeof el === 'string') {\n      el = this.scroller.querySelectorAll(el);\n    }\n\n    this.on('refresh', function () {\n      _this.pages = [];\n\n      if (!_this.wrapperWidth || !_this.wrapperHeight || !_this.scrollerWidth || !_this.scrollerHeight) {\n        return;\n      }\n\n      var stepX = snap.stepX || _this.wrapperWidth;\n      var stepY = snap.stepY || _this.wrapperHeight;\n\n      var x = 0;\n      var y = void 0;\n      var cx = void 0;\n      var cy = void 0;\n      var i = 0;\n      var l = void 0;\n      var m = 0;\n      var n = void 0;\n      var rect = void 0;\n      if (!el) {\n        cx = Math.round(stepX / 2);\n        cy = Math.round(stepY / 2);\n\n        while (x > -_this.scrollerWidth) {\n          _this.pages[i] = [];\n          l = 0;\n          y = 0;\n\n          while (y > -_this.scrollerHeight) {\n            _this.pages[i][l] = {\n              x: Math.max(x, _this.maxScrollX),\n              y: Math.max(y, _this.maxScrollY),\n              width: stepX,\n              height: stepY,\n              cx: x - cx,\n              cy: y - cy\n            };\n\n            y -= stepY;\n            l++;\n          }\n\n          x -= stepX;\n          i++;\n        }\n      } else {\n        l = el.length;\n        n = -1;\n\n        for (; i < l; i++) {\n          rect = getRect(el[i]);\n          if (i === 0 || rect.left <= getRect(el[i - 1]).left) {\n            m = 0;\n            n++;\n          }\n\n          if (!_this.pages[m]) {\n            _this.pages[m] = [];\n          }\n\n          x = Math.max(-rect.left, _this.maxScrollX);\n          y = Math.max(-rect.top, _this.maxScrollY);\n          cx = x - Math.round(rect.width / 2);\n          cy = y - Math.round(rect.height / 2);\n\n          _this.pages[m][n] = {\n            x: x,\n            y: y,\n            width: rect.width,\n            height: rect.height,\n            cx: cx,\n            cy: cy\n          };\n\n          if (x > _this.maxScrollX) {\n            m++;\n          }\n        }\n      }\n\n      _this._checkSnapLoop();\n\n      var initPageX = snap._loopX ? 1 : 0;\n      var initPageY = snap._loopY ? 1 : 0;\n      _this._goToPage(_this.currentPage.pageX || initPageX, _this.currentPage.pageY || initPageY, 0, undefined, true);\n\n      // Update snap threshold if needed.\n      var snapThreshold = snap.threshold;\n      if (snapThreshold % 1 === 0) {\n        _this.snapThresholdX = snapThreshold;\n        _this.snapThresholdY = snapThreshold;\n      } else {\n        _this.snapThresholdX = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].width * snapThreshold);\n        _this.snapThresholdY = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].height * snapThreshold);\n      }\n    });\n\n    this.on('scrollEnd', function () {\n      if (snap.loop) {\n        if (snap._loopX) {\n          if (_this.currentPage.pageX === 0) {\n            _this._goToPage(_this.pages.length - 2, _this.currentPage.pageY, 0, undefined, true);\n          }\n          if (_this.currentPage.pageX === _this.pages.length - 1) {\n            _this._goToPage(1, _this.currentPage.pageY, 0, undefined, true);\n          }\n        } else {\n          if (_this.currentPage.pageY === 0) {\n            _this._goToPage(_this.currentPage.pageX, _this.pages[0].length - 2, 0, undefined, true);\n          }\n          if (_this.currentPage.pageY === _this.pages[0].length - 1) {\n            _this._goToPage(_this.currentPage.pageX, 1, 0, undefined, true);\n          }\n        }\n      }\n    });\n\n    if (snap.listenFlick !== false) {\n      this.on('flick', function () {\n        var time = snap.speed || Math.max(Math.max(Math.min(Math.abs(_this.x - _this.startX), 1000), Math.min(Math.abs(_this.y - _this.startY), 1000)), 300);\n\n        _this._goToPage(_this.currentPage.pageX + _this.directionX, _this.currentPage.pageY + _this.directionY, time);\n      });\n    }\n\n    this.on('destroy', function () {\n      if (snap.loop) {\n        var _children = _this.scroller.children;\n        if (_children.length > 2) {\n          removeChild(_this.scroller, _children[_children.length - 1]);\n          removeChild(_this.scroller, _children[0]);\n        }\n      }\n    });\n  };\n\n  BScroll.prototype._checkSnapLoop = function () {\n    var snap = this.options.snap;\n\n    if (!snap.loop || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    if (this.pages.length > 1) {\n      snap._loopX = true;\n    }\n    if (this.pages[0] && this.pages[0].length > 1) {\n      snap._loopY = true;\n    }\n    if (snap._loopX && snap._loopY) {\n      warn('Loop does not support two direction at the same time.');\n    }\n  };\n\n  BScroll.prototype._nearestSnap = function (x, y) {\n    if (!this.pages.length) {\n      return { x: 0, y: 0, pageX: 0, pageY: 0 };\n    }\n\n    var i = 0;\n    // Check if we exceeded the snap threshold\n    if (Math.abs(x - this.absStartX) <= this.snapThresholdX && Math.abs(y - this.absStartY) <= this.snapThresholdY) {\n      return this.currentPage;\n    }\n\n    if (x > this.minScrollX) {\n      x = this.minScrollX;\n    } else if (x < this.maxScrollX) {\n      x = this.maxScrollX;\n    }\n\n    if (y > this.minScrollY) {\n      y = this.minScrollY;\n    } else if (y < this.maxScrollY) {\n      y = this.maxScrollY;\n    }\n\n    var l = this.pages.length;\n    for (; i < l; i++) {\n      if (x >= this.pages[i][0].cx) {\n        x = this.pages[i][0].x;\n        break;\n      }\n    }\n\n    l = this.pages[i].length;\n\n    var m = 0;\n    for (; m < l; m++) {\n      if (y >= this.pages[0][m].cy) {\n        y = this.pages[0][m].y;\n        break;\n      }\n    }\n\n    if (i === this.currentPage.pageX) {\n      i += this.directionX;\n\n      if (i < 0) {\n        i = 0;\n      } else if (i >= this.pages.length) {\n        i = this.pages.length - 1;\n      }\n\n      x = this.pages[i][0].x;\n    }\n\n    if (m === this.currentPage.pageY) {\n      m += this.directionY;\n\n      if (m < 0) {\n        m = 0;\n      } else if (m >= this.pages[0].length) {\n        m = this.pages[0].length - 1;\n      }\n\n      y = this.pages[0][m].y;\n    }\n\n    return {\n      x: x,\n      y: y,\n      pageX: i,\n      pageY: m\n    };\n  };\n\n  BScroll.prototype._goToPage = function (x) {\n    var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    var time = arguments[2];\n    var easing = arguments[3];\n    var isSilent = arguments[4];\n\n    var snap = this.options.snap;\n\n    if (!snap || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    easing = easing || snap.easing || ease.bounce;\n\n    if (x >= this.pages.length) {\n      x = this.pages.length - 1;\n    } else if (x < 0) {\n      x = 0;\n    }\n\n    if (!this.pages[x]) {\n      return;\n    }\n\n    if (y >= this.pages[x].length) {\n      y = this.pages[x].length - 1;\n    } else if (y < 0) {\n      y = 0;\n    }\n\n    var posX = this.pages[x][y].x;\n    var posY = this.pages[x][y].y;\n\n    time = time === undefined ? snap.speed || Math.max(Math.max(Math.min(Math.abs(posX - this.x), 1000), Math.min(Math.abs(posY - this.y), 1000)), 300) : time;\n\n    this.currentPage = {\n      x: posX,\n      y: posY,\n      pageX: x,\n      pageY: y\n    };\n    this.scrollTo(posX, posY, time, easing, isSilent);\n  };\n\n  BScroll.prototype.goToPage = function (x, y, time, easing) {\n    var snap = this.options.snap;\n    if (!snap || !this.pages || !this.pages.length) {\n      return;\n    }\n\n    if (snap.loop) {\n      var len = void 0;\n      if (snap._loopX) {\n        len = this.pages.length - 2;\n        if (x >= len) {\n          x = len - 1;\n        } else if (x < 0) {\n          x = 0;\n        }\n        x += 1;\n      } else {\n        len = this.pages[0].length - 2;\n        if (y >= len) {\n          y = len - 1;\n        } else if (y < 0) {\n          y = 0;\n        }\n        y += 1;\n      }\n    }\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.next = function (time, easing) {\n    var snap = this.options.snap;\n    if (!snap) {\n      return;\n    }\n\n    var x = this.currentPage.pageX;\n    var y = this.currentPage.pageY;\n\n    x++;\n    if (x >= this.pages.length && this.hasVerticalScroll) {\n      x = 0;\n      y++;\n    }\n\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.prev = function (time, easing) {\n    var snap = this.options.snap;\n    if (!snap) {\n      return;\n    }\n\n    var x = this.currentPage.pageX;\n    var y = this.currentPage.pageY;\n\n    x--;\n    if (x < 0 && this.hasVerticalScroll) {\n      x = 0;\n      y--;\n    }\n\n    this._goToPage(x, y, time, easing);\n  };\n\n  BScroll.prototype.getCurrentPage = function () {\n    var snap = this.options.snap;\n    if (!snap) {\n      return null;\n    }\n\n    if (snap.loop) {\n      var currentPage = void 0;\n      if (snap._loopX) {\n        currentPage = extend({}, this.currentPage, {\n          pageX: this.currentPage.pageX - 1\n        });\n      } else {\n        currentPage = extend({}, this.currentPage, {\n          pageY: this.currentPage.pageY - 1\n        });\n      }\n      return currentPage;\n    }\n    return this.currentPage;\n  };\n}\n\nfunction wheelMixin(BScroll) {\n  BScroll.prototype.wheelTo = function () {\n    var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n    if (this.options.wheel) {\n      var y = -index * this.itemHeight;\n      this.scrollTo(0, y);\n    }\n  };\n\n  BScroll.prototype.getSelectedIndex = function () {\n    return this.options.wheel && this.selectedIndex;\n  };\n\n  BScroll.prototype._initWheel = function () {\n    var wheel = this.options.wheel;\n    if (!wheel.wheelWrapperClass) {\n      wheel.wheelWrapperClass = 'wheel-scroll';\n    }\n    if (!wheel.wheelItemClass) {\n      wheel.wheelItemClass = 'wheel-item';\n    }\n    if (!wheel.wheelDisabledItemClass) {\n      wheel.wheelDisabledItemClass = 'wheel-disabled-item';\n    }\n    if (wheel.selectedIndex === undefined) {\n      wheel.selectedIndex = 0;\n    }\n  };\n\n  BScroll.prototype._findNearestValidWheel = function (y) {\n    y = y > 0 ? 0 : y < this.maxScrollY ? this.maxScrollY : y;\n    var wheel = this.options.wheel;\n    var currentIndex = Math.abs(Math.round(-y / this.itemHeight));\n    var cacheIndex = currentIndex;\n    var items = this.items;\n    // Impersonation web native select\n    // first, check whether there is a enable item whose index is smaller than currentIndex\n    // then, check whether there is a enable item whose index is bigger than currentIndex\n    // otherwise, there are all disabled items, just keep currentIndex unchange\n    while (currentIndex >= 0) {\n      if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n        break;\n      }\n      currentIndex--;\n    }\n\n    if (currentIndex < 0) {\n      currentIndex = cacheIndex;\n      while (currentIndex <= items.length - 1) {\n        if (items[currentIndex].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n          break;\n        }\n        currentIndex++;\n      }\n    }\n\n    // keep it unchange when all the items are disabled\n    if (currentIndex === items.length) {\n      currentIndex = cacheIndex;\n    }\n    // when all the items are disabled, this.selectedIndex should always be -1\n    return {\n      index: this.wheelItemsAllDisabled ? -1 : currentIndex,\n      y: -currentIndex * this.itemHeight\n    };\n  };\n\n  BScroll.prototype._checkWheelAllDisabled = function () {\n    var wheel = this.options.wheel;\n    var items = this.items;\n    this.wheelItemsAllDisabled = true;\n    for (var i = 0; i < items.length; i++) {\n      if (items[i].className.indexOf(wheel.wheelDisabledItemClass) === -1) {\n        this.wheelItemsAllDisabled = false;\n        break;\n      }\n    }\n  };\n}\n\nvar INDICATOR_MIN_LEN = 8;\n\nfunction scrollbarMixin(BScroll) {\n  BScroll.prototype._initScrollbar = function () {\n    var _this = this;\n\n    var _options$scrollbar = this.options.scrollbar,\n        _options$scrollbar$fa = _options$scrollbar.fade,\n        fade = _options$scrollbar$fa === undefined ? true : _options$scrollbar$fa,\n        _options$scrollbar$in = _options$scrollbar.interactive,\n        interactive = _options$scrollbar$in === undefined ? false : _options$scrollbar$in;\n\n    this.indicators = [];\n    var indicator = void 0;\n\n    if (this.options.scrollX) {\n      indicator = {\n        el: createScrollbar('horizontal'),\n        direction: 'horizontal',\n        fade: fade,\n        interactive: interactive\n      };\n      this._insertScrollBar(indicator.el);\n\n      this.indicators.push(new Indicator(this, indicator));\n    }\n\n    if (this.options.scrollY) {\n      indicator = {\n        el: createScrollbar('vertical'),\n        direction: 'vertical',\n        fade: fade,\n        interactive: interactive\n      };\n      this._insertScrollBar(indicator.el);\n      this.indicators.push(new Indicator(this, indicator));\n    }\n\n    this.on('refresh', function () {\n      for (var i = 0; i < _this.indicators.length; i++) {\n        _this.indicators[i].refresh();\n      }\n    });\n\n    if (fade) {\n      this.on('scrollEnd', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade();\n        }\n      });\n\n      this.on('scrollCancel', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade();\n        }\n      });\n\n      this.on('scrollStart', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade(true);\n        }\n      });\n\n      this.on('beforeScrollStart', function () {\n        for (var i = 0; i < _this.indicators.length; i++) {\n          _this.indicators[i].fade(true, true);\n        }\n      });\n    }\n\n    this.on('destroy', function () {\n      _this._removeScrollBars();\n    });\n  };\n\n  BScroll.prototype._insertScrollBar = function (scrollbar) {\n    this.wrapper.appendChild(scrollbar);\n  };\n\n  BScroll.prototype._removeScrollBars = function () {\n    for (var i = 0; i < this.indicators.length; i++) {\n      this.indicators[i].destroy();\n    }\n  };\n}\n\nfunction createScrollbar(direction) {\n  var scrollbar = document.createElement('div');\n  var indicator = document.createElement('div');\n\n  scrollbar.style.cssText = 'position:absolute;z-index:9999;pointerEvents:none';\n  indicator.style.cssText = 'box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;';\n\n  indicator.className = 'bscroll-indicator';\n\n  if (direction === 'horizontal') {\n    scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';\n    indicator.style.height = '100%';\n    scrollbar.className = 'bscroll-horizontal-scrollbar';\n  } else {\n    scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';\n    indicator.style.width = '100%';\n    scrollbar.className = 'bscroll-vertical-scrollbar';\n  }\n\n  scrollbar.style.cssText += ';overflow:hidden';\n  scrollbar.appendChild(indicator);\n\n  return scrollbar;\n}\n\nfunction Indicator(scroller, options) {\n  this.wrapper = options.el;\n  this.wrapperStyle = this.wrapper.style;\n  this.indicator = this.wrapper.children[0];\n  this.indicatorStyle = this.indicator.style;\n  this.scroller = scroller;\n  this.direction = options.direction;\n  if (options.fade) {\n    this.visible = 0;\n    this.wrapperStyle.opacity = '0';\n  } else {\n    this.visible = 1;\n  }\n\n  this.sizeRatioX = 1;\n  this.sizeRatioY = 1;\n  this.maxPosX = 0;\n  this.maxPosY = 0;\n  this.x = 0;\n  this.y = 0;\n\n  if (options.interactive) {\n    this._addDOMEvents();\n  }\n}\n\nIndicator.prototype.handleEvent = function (e) {\n  switch (e.type) {\n    case 'touchstart':\n    case 'mousedown':\n      this._start(e);\n      break;\n    case 'touchmove':\n    case 'mousemove':\n      this._move(e);\n      break;\n    case 'touchend':\n    case 'mouseup':\n    case 'touchcancel':\n    case 'mousecancel':\n      this._end(e);\n      break;\n  }\n};\n\nIndicator.prototype.refresh = function () {\n  if (this._shouldShow()) {\n    this.transitionTime();\n    this._calculate();\n    this.updatePosition();\n  }\n};\n\nIndicator.prototype.fade = function (visible, hold) {\n  var _this2 = this;\n\n  if (hold && !this.visible) {\n    return;\n  }\n\n  var time = visible ? 250 : 500;\n\n  visible = visible ? '1' : '0';\n\n  this.wrapperStyle[style.transitionDuration] = time + 'ms';\n\n  clearTimeout(this.fadeTimeout);\n  this.fadeTimeout = setTimeout(function () {\n    _this2.wrapperStyle.opacity = visible;\n    _this2.visible = +visible;\n  }, 0);\n};\n\nIndicator.prototype.updatePosition = function () {\n  if (this.direction === 'vertical') {\n    var y = Math.round(this.sizeRatioY * this.scroller.y);\n\n    if (y < 0) {\n      this.transitionTime(500);\n      var height = Math.max(this.indicatorHeight + y * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.height = height + 'px';\n      y = 0;\n    } else if (y > this.maxPosY) {\n      this.transitionTime(500);\n      var _height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.height = _height + 'px';\n      y = this.maxPosY + this.indicatorHeight - _height;\n    } else {\n      this.indicatorStyle.height = this.indicatorHeight + 'px';\n    }\n    this.y = y;\n\n    if (this.scroller.options.useTransform) {\n      this.indicatorStyle[style.transform] = 'translateY(' + y + 'px)' + this.scroller.translateZ;\n    } else {\n      this.indicatorStyle.top = y + 'px';\n    }\n  } else {\n    var x = Math.round(this.sizeRatioX * this.scroller.x);\n\n    if (x < 0) {\n      this.transitionTime(500);\n      var width = Math.max(this.indicatorWidth + x * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.width = width + 'px';\n      x = 0;\n    } else if (x > this.maxPosX) {\n      this.transitionTime(500);\n      var _width = Math.max(this.indicatorWidth - (x - this.maxPosX) * 3, INDICATOR_MIN_LEN);\n      this.indicatorStyle.width = _width + 'px';\n      x = this.maxPosX + this.indicatorWidth - _width;\n    } else {\n      this.indicatorStyle.width = this.indicatorWidth + 'px';\n    }\n\n    this.x = x;\n\n    if (this.scroller.options.useTransform) {\n      this.indicatorStyle[style.transform] = 'translateX(' + x + 'px)' + this.scroller.translateZ;\n    } else {\n      this.indicatorStyle.left = x + 'px';\n    }\n  }\n};\n\nIndicator.prototype.transitionTime = function () {\n  var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n  this.indicatorStyle[style.transitionDuration] = time + 'ms';\n};\n\nIndicator.prototype.transitionTimingFunction = function (easing) {\n  this.indicatorStyle[style.transitionTimingFunction] = easing;\n};\n\nIndicator.prototype.destroy = function () {\n  this._removeDOMEvents();\n  this.wrapper.parentNode.removeChild(this.wrapper);\n};\n\nIndicator.prototype._start = function (e) {\n  var point = e.touches ? e.touches[0] : e;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  this.transitionTime();\n\n  this.initiated = true;\n  this.moved = false;\n  this.lastPointX = point.pageX;\n  this.lastPointY = point.pageY;\n\n  this.startTime = getNow();\n\n  this._handleMoveEvents(addEvent);\n  this.scroller.trigger('beforeScrollStart');\n};\n\nIndicator.prototype._move = function (e) {\n  var point = e.touches ? e.touches[0] : e;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  if (!this.moved) {\n    this.scroller.trigger('scrollStart');\n  }\n\n  this.moved = true;\n\n  var deltaX = point.pageX - this.lastPointX;\n  this.lastPointX = point.pageX;\n\n  var deltaY = point.pageY - this.lastPointY;\n  this.lastPointY = point.pageY;\n\n  var newX = this.x + deltaX;\n  var newY = this.y + deltaY;\n\n  this._pos(newX, newY);\n};\n\nIndicator.prototype._end = function (e) {\n  if (!this.initiated) {\n    return;\n  }\n  this.initiated = false;\n\n  e.preventDefault();\n  e.stopPropagation();\n\n  this._handleMoveEvents(removeEvent);\n\n  var snapOption = this.scroller.options.snap;\n  if (snapOption) {\n    var speed = snapOption.speed,\n        _snapOption$easing = snapOption.easing,\n        easing = _snapOption$easing === undefined ? ease.bounce : _snapOption$easing;\n\n    var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);\n\n    var time = speed || Math.max(Math.max(Math.min(Math.abs(this.scroller.x - snap.x), 1000), Math.min(Math.abs(this.scroller.y - snap.y), 1000)), 300);\n\n    if (this.scroller.x !== snap.x || this.scroller.y !== snap.y) {\n      this.scroller.directionX = 0;\n      this.scroller.directionY = 0;\n      this.scroller.currentPage = snap;\n      this.scroller.scrollTo(snap.x, snap.y, time, easing);\n    }\n  }\n\n  if (this.moved) {\n    this.scroller.trigger('scrollEnd', {\n      x: this.scroller.x,\n      y: this.scroller.y\n    });\n  }\n};\n\nIndicator.prototype._pos = function (x, y) {\n  if (x < 0) {\n    x = 0;\n  } else if (x > this.maxPosX) {\n    x = this.maxPosX;\n  }\n\n  if (y < 0) {\n    y = 0;\n  } else if (y > this.maxPosY) {\n    y = this.maxPosY;\n  }\n\n  x = Math.round(x / this.sizeRatioX);\n  y = Math.round(y / this.sizeRatioY);\n\n  this.scroller.scrollTo(x, y);\n  this.scroller.trigger('scroll', {\n    x: this.scroller.x,\n    y: this.scroller.y\n  });\n};\n\nIndicator.prototype._shouldShow = function () {\n  if (this.direction === 'vertical' && this.scroller.hasVerticalScroll || this.direction === 'horizontal' && this.scroller.hasHorizontalScroll) {\n    this.wrapper.style.display = '';\n    return true;\n  }\n  this.wrapper.style.display = 'none';\n  return false;\n};\n\nIndicator.prototype._calculate = function () {\n  if (this.direction === 'vertical') {\n    var wrapperHeight = this.wrapper.clientHeight;\n    this.indicatorHeight = Math.max(Math.round(wrapperHeight * wrapperHeight / (this.scroller.scrollerHeight || wrapperHeight || 1)), INDICATOR_MIN_LEN);\n    this.indicatorStyle.height = this.indicatorHeight + 'px';\n\n    this.maxPosY = wrapperHeight - this.indicatorHeight;\n\n    this.sizeRatioY = this.maxPosY / this.scroller.maxScrollY;\n  } else {\n    var wrapperWidth = this.wrapper.clientWidth;\n    this.indicatorWidth = Math.max(Math.round(wrapperWidth * wrapperWidth / (this.scroller.scrollerWidth || wrapperWidth || 1)), INDICATOR_MIN_LEN);\n    this.indicatorStyle.width = this.indicatorWidth + 'px';\n\n    this.maxPosX = wrapperWidth - this.indicatorWidth;\n\n    this.sizeRatioX = this.maxPosX / this.scroller.maxScrollX;\n  }\n};\n\nIndicator.prototype._addDOMEvents = function () {\n  var eventOperation = addEvent;\n  this._handleDOMEvents(eventOperation);\n};\n\nIndicator.prototype._removeDOMEvents = function () {\n  var eventOperation = removeEvent;\n  this._handleDOMEvents(eventOperation);\n  this._handleMoveEvents(eventOperation);\n};\n\nIndicator.prototype._handleMoveEvents = function (eventOperation) {\n  if (!this.scroller.options.disableTouch) {\n    eventOperation(window, 'touchmove', this);\n  }\n  if (!this.scroller.options.disableMouse) {\n    eventOperation(window, 'mousemove', this);\n  }\n};\n\nIndicator.prototype._handleDOMEvents = function (eventOperation) {\n  if (!this.scroller.options.disableTouch) {\n    eventOperation(this.indicator, 'touchstart', this);\n    eventOperation(window, 'touchend', this);\n  }\n  if (!this.scroller.options.disableMouse) {\n    eventOperation(this.indicator, 'mousedown', this);\n    eventOperation(window, 'mouseup', this);\n  }\n};\n\nfunction pullDownMixin(BScroll) {\n  BScroll.prototype._initPullDown = function () {\n    // must watch scroll in real time\n    this.options.probeType = PROBE_REALTIME;\n  };\n\n  BScroll.prototype._checkPullDown = function () {\n    var _options$pullDownRefr = this.options.pullDownRefresh,\n        _options$pullDownRefr2 = _options$pullDownRefr.threshold,\n        threshold = _options$pullDownRefr2 === undefined ? 90 : _options$pullDownRefr2,\n        _options$pullDownRefr3 = _options$pullDownRefr.stop,\n        stop = _options$pullDownRefr3 === undefined ? 40 : _options$pullDownRefr3;\n\n    // check if a real pull down action\n\n    if (this.directionY !== DIRECTION_DOWN || this.y < threshold) {\n      return false;\n    }\n\n    if (!this.pulling) {\n      this.pulling = true;\n      this.trigger('pullingDown');\n    }\n    this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n\n    return this.pulling;\n  };\n\n  BScroll.prototype.finishPullDown = function () {\n    this.pulling = false;\n    this.resetPosition(this.options.bounceTime, ease.bounce);\n  };\n\n  BScroll.prototype.openPullDown = function () {\n    var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    this.options.pullDownRefresh = config;\n    this._initPullDown();\n  };\n\n  BScroll.prototype.closePullDown = function () {\n    this.options.pullDownRefresh = false;\n  };\n\n  BScroll.prototype.autoPullDownRefresh = function () {\n    var _options$pullDownRefr4 = this.options.pullDownRefresh,\n        _options$pullDownRefr5 = _options$pullDownRefr4.threshold,\n        threshold = _options$pullDownRefr5 === undefined ? 90 : _options$pullDownRefr5,\n        _options$pullDownRefr6 = _options$pullDownRefr4.stop,\n        stop = _options$pullDownRefr6 === undefined ? 40 : _options$pullDownRefr6;\n\n\n    if (this.pulling) {\n      return;\n    }\n    this.pulling = true;\n\n    this.scrollTo(this.x, threshold);\n    this.trigger('pullingDown');\n    this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);\n  };\n}\n\nfunction pullUpMixin(BScroll) {\n  BScroll.prototype._initPullUp = function () {\n    // must watch scroll in real time\n    this.options.probeType = PROBE_REALTIME;\n\n    this.pullupWatching = false;\n    this._watchPullUp();\n  };\n\n  BScroll.prototype._watchPullUp = function () {\n    if (this.pullupWatching) {\n      return;\n    }\n    this.pullupWatching = true;\n    this.on('scroll', this._checkToEnd);\n  };\n\n  BScroll.prototype._checkToEnd = function (pos) {\n    var _this = this;\n\n    var _options$pullUpLoad$t = this.options.pullUpLoad.threshold,\n        threshold = _options$pullUpLoad$t === undefined ? 0 : _options$pullUpLoad$t;\n\n    if (this.movingDirectionY === DIRECTION_UP && pos.y <= this.maxScrollY + threshold) {\n      // reset pullupWatching status after scroll end.\n      this.once('scrollEnd', function () {\n        _this.pullupWatching = false;\n      });\n      this.trigger('pullingUp');\n      this.off('scroll', this._checkToEnd);\n    }\n  };\n\n  BScroll.prototype.finishPullUp = function () {\n    var _this2 = this;\n\n    if (this.pullupWatching) {\n      this.once('scrollEnd', function () {\n        _this2._watchPullUp();\n      });\n    } else {\n      this._watchPullUp();\n    }\n  };\n\n  BScroll.prototype.openPullUp = function () {\n    var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    this.options.pullUpLoad = config;\n    this._initPullUp();\n  };\n\n  BScroll.prototype.closePullUp = function () {\n    this.options.pullUpLoad = false;\n    if (!this.pullupWatching) {\n      return;\n    }\n    this.pullupWatching = false;\n    this.off('scroll', this._checkToEnd);\n  };\n}\n\nfunction mouseWheelMixin(BScroll) {\n  BScroll.prototype._initMouseWheel = function () {\n    var _this = this;\n\n    this._handleMouseWheelEvent(addEvent);\n\n    this.on('destroy', function () {\n      clearTimeout(_this.mouseWheelTimer);\n      clearTimeout(_this.mouseWheelEndTimer);\n      _this._handleMouseWheelEvent(removeEvent);\n    });\n\n    this.firstWheelOpreation = true;\n  };\n\n  BScroll.prototype._handleMouseWheelEvent = function (eventOperation) {\n    eventOperation(this.wrapper, 'wheel', this);\n    eventOperation(this.wrapper, 'mousewheel', this);\n    eventOperation(this.wrapper, 'DOMMouseScroll', this);\n  };\n\n  BScroll.prototype._onMouseWheel = function (e) {\n    var _this2 = this;\n\n    if (!this.enabled) {\n      return;\n    }\n    e.preventDefault();\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    if (this.firstWheelOpreation) {\n      this.trigger('scrollStart');\n    }\n    this.firstWheelOpreation = false;\n\n    var _options$mouseWheel = this.options.mouseWheel,\n        _options$mouseWheel$s = _options$mouseWheel.speed,\n        speed = _options$mouseWheel$s === undefined ? 20 : _options$mouseWheel$s,\n        _options$mouseWheel$i = _options$mouseWheel.invert,\n        invert = _options$mouseWheel$i === undefined ? false : _options$mouseWheel$i,\n        _options$mouseWheel$e = _options$mouseWheel.easeTime,\n        easeTime = _options$mouseWheel$e === undefined ? 300 : _options$mouseWheel$e;\n\n\n    clearTimeout(this.mouseWheelTimer);\n    this.mouseWheelTimer = setTimeout(function () {\n      if (!_this2.options.snap && !easeTime) {\n        _this2.trigger('scrollEnd', {\n          x: _this2.x,\n          y: _this2.y\n        });\n      }\n      _this2.firstWheelOpreation = true;\n    }, 400);\n\n    var wheelDeltaX = void 0;\n    var wheelDeltaY = void 0;\n\n    switch (true) {\n      case 'deltaX' in e:\n        if (e.deltaMode === 1) {\n          wheelDeltaX = -e.deltaX * speed;\n          wheelDeltaY = -e.deltaY * speed;\n        } else {\n          wheelDeltaX = -e.deltaX;\n          wheelDeltaY = -e.deltaY;\n        }\n        break;\n      case 'wheelDeltaX' in e:\n        wheelDeltaX = e.wheelDeltaX / 120 * speed;\n        wheelDeltaY = e.wheelDeltaY / 120 * speed;\n        break;\n      case 'wheelDelta' in e:\n        wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * speed;\n        break;\n      case 'detail' in e:\n        wheelDeltaX = wheelDeltaY = -e.detail / 3 * speed;\n        break;\n      default:\n        return;\n    }\n\n    var direction = invert ? -1 : 1;\n    wheelDeltaX *= direction;\n    wheelDeltaY *= direction;\n\n    if (!this.hasVerticalScroll) {\n      wheelDeltaX = wheelDeltaY;\n      wheelDeltaY = 0;\n    }\n\n    var newX = void 0;\n    var newY = void 0;\n    if (this.options.snap) {\n      newX = this.currentPage.pageX;\n      newY = this.currentPage.pageY;\n\n      if (wheelDeltaX > 0) {\n        newX--;\n      } else if (wheelDeltaX < 0) {\n        newX++;\n      }\n\n      if (wheelDeltaY > 0) {\n        newY--;\n      } else if (wheelDeltaY < 0) {\n        newY++;\n      }\n\n      this._goToPage(newX, newY);\n      return;\n    }\n\n    newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);\n    newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);\n\n    this.movingDirectionX = this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;\n    this.movingDirectionY = this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;\n\n    if (newX > this.minScrollX) {\n      newX = this.minScrollX;\n    } else if (newX < this.maxScrollX) {\n      newX = this.maxScrollX;\n    }\n\n    if (newY > this.minScrollY) {\n      newY = this.minScrollY;\n    } else if (newY < this.maxScrollY) {\n      newY = this.maxScrollY;\n    }\n\n    var needTriggerEnd = this.y === newY;\n    this.scrollTo(newX, newY, easeTime, ease.swipe);\n    this.trigger('scroll', {\n      x: this.x,\n      y: this.y\n    });\n    clearTimeout(this.mouseWheelEndTimer);\n    if (needTriggerEnd) {\n      this.mouseWheelEndTimer = setTimeout(function () {\n        _this2.trigger('scrollEnd', {\n          x: _this2.x,\n          y: _this2.y\n        });\n      }, easeTime);\n    }\n  };\n}\n\nfunction zoomMixin(BScroll) {\n  BScroll.prototype._initZoom = function () {\n    var _options$zoom = this.options.zoom,\n        _options$zoom$start = _options$zoom.start,\n        start = _options$zoom$start === undefined ? 1 : _options$zoom$start,\n        _options$zoom$min = _options$zoom.min,\n        min = _options$zoom$min === undefined ? 1 : _options$zoom$min,\n        _options$zoom$max = _options$zoom.max,\n        max = _options$zoom$max === undefined ? 4 : _options$zoom$max;\n\n    this.scale = Math.min(Math.max(start, min), max);\n    this.setScale(this.scale);\n    this.scrollerStyle[style.transformOrigin] = '0 0';\n  };\n\n  BScroll.prototype._zoomTo = function (scale, originX, originY, startScale) {\n    this.scaled = true;\n\n    var lastScale = scale / (startScale || this.scale);\n    this.setScale(scale);\n\n    this.refresh();\n\n    var newX = Math.round(this.startX - (originX - this.relativeX) * (lastScale - 1));\n    var newY = Math.round(this.startY - (originY - this.relativeY) * (lastScale - 1));\n\n    if (newX > this.minScrollX) {\n      newX = this.minScrollX;\n    } else if (newX < this.maxScrollX) {\n      newX = this.maxScrollX;\n    }\n\n    if (newY > this.minScrollY) {\n      newY = this.minScrollY;\n    } else if (newY < this.maxScrollY) {\n      newY = this.maxScrollY;\n    }\n\n    if (this.x !== newX || this.y !== newY) {\n      this.scrollTo(newX, newY, this.options.bounceTime);\n    }\n\n    this.scaled = false;\n  };\n\n  BScroll.prototype.zoomTo = function (scale, x, y) {\n    var _offsetToBody = offsetToBody(this.wrapper),\n        left = _offsetToBody.left,\n        top = _offsetToBody.top;\n\n    var originX = x + left - this.x;\n    var originY = y + top - this.y;\n    this._zoomTo(scale, originX, originY);\n  };\n\n  BScroll.prototype._zoomStart = function (e) {\n    var firstFinger = e.touches[0];\n    var secondFinger = e.touches[1];\n    var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n    var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n\n    this.startDistance = getDistance(deltaX, deltaY);\n    this.startScale = this.scale;\n\n    var _offsetToBody2 = offsetToBody(this.wrapper),\n        left = _offsetToBody2.left,\n        top = _offsetToBody2.top;\n\n    this.originX = Math.abs(firstFinger.pageX + secondFinger.pageX) / 2 + left - this.x;\n    this.originY = Math.abs(firstFinger.pageY + secondFinger.pageY) / 2 + top - this.y;\n\n    this.trigger('zoomStart');\n  };\n\n  BScroll.prototype._zoom = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    var firstFinger = e.touches[0];\n    var secondFinger = e.touches[1];\n    var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);\n    var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);\n    var distance = getDistance(deltaX, deltaY);\n    var scale = distance / this.startDistance * this.startScale;\n\n    this.scaled = true;\n\n    var _options$zoom2 = this.options.zoom,\n        _options$zoom2$min = _options$zoom2.min,\n        min = _options$zoom2$min === undefined ? 1 : _options$zoom2$min,\n        _options$zoom2$max = _options$zoom2.max,\n        max = _options$zoom2$max === undefined ? 4 : _options$zoom2$max;\n\n\n    if (scale < min) {\n      scale = 0.5 * min * Math.pow(2.0, scale / min);\n    } else if (scale > max) {\n      scale = 2.0 * max * Math.pow(0.5, max / scale);\n    }\n\n    var lastScale = scale / this.startScale;\n\n    var x = this.startX - (this.originX - this.relativeX) * (lastScale - 1);\n    var y = this.startY - (this.originY - this.relativeY) * (lastScale - 1);\n\n    this.setScale(scale);\n\n    this.scrollTo(x, y, 0);\n  };\n\n  BScroll.prototype._zoomEnd = function (e) {\n    if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {\n      return;\n    }\n\n    if (this.options.preventDefault) {\n      e.preventDefault();\n    }\n\n    if (this.options.stopPropagation) {\n      e.stopPropagation();\n    }\n\n    this.isInTransition = false;\n    this.isAnimating = false;\n    this.initiated = 0;\n\n    var _options$zoom3 = this.options.zoom,\n        _options$zoom3$min = _options$zoom3.min,\n        min = _options$zoom3$min === undefined ? 1 : _options$zoom3$min,\n        _options$zoom3$max = _options$zoom3.max,\n        max = _options$zoom3$max === undefined ? 4 : _options$zoom3$max;\n\n\n    var scale = this.scale > max ? max : this.scale < min ? min : this.scale;\n\n    this._zoomTo(scale, this.originX, this.originY, this.startScale);\n\n    this.trigger('zoomEnd');\n  };\n}\n\n// import { ease } from '../util/ease'\n\n// Number of items to instantiate beyond current view in the scroll direction.\nvar RUNWAY_ITEMS = 30;\n\n// Number of items to instantiate beyond current view in the opposite direction.\nvar RUNWAY_ITEMS_OPPOSITE = 10;\n\n// The animation interval (in ms) for fading in content from tombstones.\nvar ANIMATION_DURATION_MS = 200;\n\n// The number of pixels of default additional length to allow scrolling to.\nvar DEFAULT_SCROLL_RUNWAY = 2000;\n\nfunction infiniteMixin(BScroll) {\n  BScroll.prototype._initInfinite = function () {\n    this.options.probeType = 3;\n    this.maxScrollY = -DEFAULT_SCROLL_RUNWAY;\n    this.infiniteScroller = new InfiniteScroller(this, this.options.infinity);\n  };\n}\n\nfunction isTombstoneNode(node) {\n  if (node && node.classList) {\n    return node.classList.contains('tombstone');\n  }\n}\n\nfunction InfiniteScroller(scroller, options) {\n  var _this = this;\n\n  this.options = options;\n  assert(typeof this.options.createTombstone === 'function', 'Infinite scroll need createTombstone Function to create tombstone');\n\n  assert(typeof this.options.fetch === 'function', 'Infinite scroll need fetch Function to fetch new data.');\n\n  assert(typeof this.options.render === 'function', 'Infinite scroll need render Function to render each item.');\n\n  this.firstAttachedItem = 0;\n  this.lastAttachedItem = 0;\n\n  this.anchorScrollTop = 0;\n  this.anchorItem = {\n    index: 0,\n    offset: 0\n  };\n  this.tombstoneHeight = 0;\n  this.tombstoneWidth = 0;\n  this.tombstones = [];\n  this.tombstonesAnimationHandlers = [];\n\n  this.items = [];\n  this.loadedItems = 0;\n  this.requestInProgress = false;\n  this.hasMore = true;\n\n  this.scroller = scroller;\n  this.wrapperEl = this.scroller.wrapper;\n  this.scrollerEl = this.scroller.scroller;\n\n  this.scroller.on('resize', function () {\n    _this.onResize();\n  });\n  this.scroller.on('destroy', function () {\n    _this.destroy();\n  });\n\n  // wait scroll core init\n  this._onResizeHandler = setTimeout(function () {\n    _this.onResize();\n\n    // must wait tombstoneHeight has size\n    _this.scroller.on('scroll', function () {\n      _this.onScroll();\n    });\n  });\n}\n\nInfiniteScroller.prototype.destroy = function () {\n  var _this2 = this;\n\n  // In extreme scene, destroy is triggered before _onResizeHandler\n  clearTimeout(this._onResizeHandler);\n  this.tombstonesAnimationHandlers.forEach(function (handler) {\n    clearTimeout(handler);\n  });\n  this.tombstonesAnimationHandlers = null;\n  this.items.forEach(function (item) {\n    if (item.node) {\n      _this2.scrollerEl.removeChild(item.node);\n      item.node = null;\n    }\n  });\n  this.scroller.infiniteScroller = null;\n  this.scroller = null;\n  this.wrapperEl = null;\n  this.scrollerEl = null;\n  this.items = null;\n  this.tombstones = null;\n};\n\nInfiniteScroller.prototype.onScroll = function () {\n  var scrollTop = -this.scroller.y;\n  var delta = scrollTop - this.anchorScrollTop;\n  if (scrollTop === 0) {\n    this.anchorItem = {\n      index: 0,\n      offset: 0\n    };\n  } else {\n    this.anchorItem = this._calculateAnchoredItem(this.anchorItem, delta);\n  }\n\n  this.anchorScrollTop = scrollTop;\n  var lastScreenItem = this._calculateAnchoredItem(this.anchorItem, this.scroller.wrapperHeight);\n\n  var start = this.anchorItem.index;\n  var end = lastScreenItem.index;\n  if (delta < 0) {\n    start -= RUNWAY_ITEMS;\n    end += RUNWAY_ITEMS_OPPOSITE;\n  } else {\n    start -= RUNWAY_ITEMS_OPPOSITE;\n    end += RUNWAY_ITEMS;\n  }\n  this.fill(start, end);\n  this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.onResize = function () {\n  var tombstone = this.options.createTombstone();\n  tombstone.style.position = 'absolute';\n  this.scrollerEl.appendChild(tombstone);\n  tombstone.style.display = '';\n  this.tombstoneHeight = tombstone.offsetHeight;\n  this.tombstoneWidth = tombstone.offsetWidth;\n  this.scrollerEl.removeChild(tombstone);\n\n  for (var i = 0; i < this.items.length; i++) {\n    this.items[i].height = this.items[i].width = 0;\n  }\n\n  this.onScroll();\n};\n\nInfiniteScroller.prototype.fill = function (start, end) {\n  this.firstAttachedItem = Math.max(0, start);\n  if (!this.hasMore) {\n    end = Math.min(end, this.items.length);\n  }\n  this.lastAttachedItem = end;\n  this.attachContent();\n};\n\nInfiniteScroller.prototype.maybeRequestContent = function () {\n  var _this3 = this;\n\n  if (this.requestInProgress || !this.hasMore) {\n    return;\n  }\n  var itemsNeeded = this.lastAttachedItem - this.loadedItems;\n  if (itemsNeeded <= 0) {\n    return;\n  }\n  this.requestInProgress = true;\n  this.options.fetch(itemsNeeded).then(function (items) {\n    _this3.requestInProgress = false;\n    if (items) {\n      _this3.addContent(items);\n    } else {\n      _this3.hasMore = false;\n      var tombstoneLen = _this3._removeTombstones();\n      var curPos = 0;\n      if (_this3.anchorItem.index <= _this3.items.length) {\n        curPos = _this3._fixScrollPosition();\n        _this3._setupAnimations({}, curPos);\n        _this3.scroller.resetPosition(_this3.scroller.options.bounceTime);\n      } else {\n        _this3.anchorItem.index -= tombstoneLen;\n        curPos = _this3._fixScrollPosition();\n        _this3._setupAnimations({}, curPos);\n        _this3.scroller.stop();\n        _this3.scroller.resetPosition();\n        _this3.onScroll();\n      }\n    }\n  });\n};\n\nInfiniteScroller.prototype.addContent = function (items) {\n  for (var i = 0; i < items.length; i++) {\n    if (this.items.length <= this.loadedItems) {\n      this._addItem();\n    }\n    this.items[this.loadedItems++].data = items[i];\n  }\n  this.attachContent();\n  this.maybeRequestContent();\n};\n\nInfiniteScroller.prototype.attachContent = function () {\n  var unusedNodes = this._collectUnusedNodes();\n  var tombstoneAnimations = this._createDOMNodes(unusedNodes);\n  this._cleanupUnusedNodes(unusedNodes);\n  this._cacheNodeSize();\n  var curPos = this._fixScrollPosition();\n  this._setupAnimations(tombstoneAnimations, curPos);\n};\n\nInfiniteScroller.prototype.resetMore = function () {\n  this.hasMore = true;\n};\n\nInfiniteScroller.prototype._removeTombstones = function () {\n  var markIndex = void 0;\n  var tombstoneLen = 0;\n  var itemLen = this.items.length;\n  for (var i = 0; i < itemLen; i++) {\n    var currentNode = this.items[i].node;\n    var currentData = this.items[i].data;\n    if ((!currentNode || isTombstoneNode(currentNode)) && !currentData) {\n      // 0 should be excluded\n      if (markIndex === void 0) {\n        markIndex = i;\n      }\n      if (currentNode) {\n        this.scrollerEl.removeChild(currentNode);\n      }\n    }\n  }\n  tombstoneLen = itemLen - markIndex;\n  this.items.splice(markIndex);\n  this.lastAttachedItem = Math.min(this.lastAttachedItem, this.items.length);\n  return tombstoneLen;\n};\n\nInfiniteScroller.prototype._collectUnusedNodes = function () {\n  var unusedNodes = [];\n  for (var i = 0; i < this.items.length; i++) {\n    // Skip the items which should be visible.\n    if (i === this.firstAttachedItem) {\n      i = this.lastAttachedItem - 1;\n      continue;\n    }\n    var currentNode = this.items[i].node;\n    if (currentNode) {\n      if (isTombstoneNode(currentNode)) {\n        // Cache tombstones for reuse\n        this.tombstones.push(currentNode);\n        this.tombstones[this.tombstones.length - 1].style.display = 'none';\n      } else {\n        unusedNodes.push(currentNode);\n      }\n    }\n    this.items[i].node = null;\n  }\n  return unusedNodes;\n};\n\nInfiniteScroller.prototype._createDOMNodes = function (unusedNodes) {\n  var tombstoneAnimations = {};\n  for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n    while (this.items.length <= i) {\n      this._addItem();\n    }\n    var currentNode = this.items[i].node;\n    var currentData = this.items[i].data;\n    if (currentNode) {\n      if (isTombstoneNode(currentNode) && currentData) {\n        currentNode.style.zIndex = 1;\n        tombstoneAnimations[i] = [currentNode, this.items[i].top - this.anchorScrollTop];\n        this.items[i].node = null;\n      } else {\n        continue;\n      }\n    }\n    var node = currentData ? this.options.render(currentData, unusedNodes.pop()) : this._getTombStone();\n    node.style.position = 'absolute';\n    this.items[i].top = -1;\n    this.scrollerEl.appendChild(node);\n    this.items[i].node = node;\n  }\n  return tombstoneAnimations;\n};\n\nInfiniteScroller.prototype._cleanupUnusedNodes = function (unusedNodes) {\n  while (unusedNodes.length) {\n    this.scrollerEl.removeChild(unusedNodes.pop());\n  }\n};\n\nInfiniteScroller.prototype._cacheNodeSize = function () {\n  for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {\n    var item = this.items[i];\n    // Only cache the height if we have the real contents, not a placeholder.\n    if (item.data && !item.height) {\n      var isTombstone = isTombstoneNode(item.node);\n      item.height = isTombstone ? this.tombstoneHeight : item.node.offsetHeight;\n      item.width = isTombstone ? this.tombstoneWidth : item.node.offsetWidth;\n    }\n  }\n};\n\nInfiniteScroller.prototype._fixScrollPosition = function () {\n  this.anchorScrollTop = 0;\n  for (var _i = 0; _i < this.anchorItem.index; _i++) {\n    this.anchorScrollTop += this.items[_i].height || this.tombstoneHeight;\n  }\n  this.anchorScrollTop += this.anchorItem.offset;\n\n  // Position all nodes.\n  var curPos = this.anchorScrollTop - this.anchorItem.offset;\n  var i = this.anchorItem.index;\n  while (i > this.firstAttachedItem) {\n    curPos -= this.items[i - 1].height || this.tombstoneHeight;\n    i--;\n  }\n\n  return curPos;\n};\n\nInfiniteScroller.prototype._setupAnimations = function (tombstoneAnimations, curPos) {\n  var _this4 = this;\n\n  for (var i in tombstoneAnimations) {\n    var animation = tombstoneAnimations[i];\n    this.items[i].node.style[style.transform] = 'translateY(' + (this.anchorScrollTop + animation[1]) + 'px) scale(' + this.tombstoneWidth / this.items[i].width + ', ' + this.tombstoneHeight / this.items[i].height + ')';\n    // Call offsetTop on the nodes to be animated to force them to apply current transforms.\n    /* eslint-disable no-unused-expressions */\n    this.items[i].node.offsetTop;\n    animation[0].offsetTop;\n    this.items[i].node.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms';\n  }\n\n  for (var _i2 = this.firstAttachedItem; _i2 < this.lastAttachedItem; _i2++) {\n    var _animation = tombstoneAnimations[_i2];\n    if (_animation) {\n      var tombstoneNode = _animation[0];\n      tombstoneNode.style[style.transition] = cssVendor + 'transform ' + ANIMATION_DURATION_MS + 'ms, opacity ' + ANIMATION_DURATION_MS + 'ms';\n      tombstoneNode.style[style.transform] = 'translateY(' + curPos + 'px) scale(' + this.items[_i2].width / this.tombstoneWidth + ', ' + this.items[_i2].height / this.tombstoneHeight + ')';\n      tombstoneNode.style.opacity = 0;\n    }\n    if (curPos !== this.items[_i2].top) {\n      if (!_animation) {\n        this.items[_i2].node.style[style.transition] = '';\n      }\n      this.items[_i2].node.style[style.transform] = 'translateY(' + curPos + 'px)';\n    }\n    this.items[_i2].top = curPos;\n    curPos += this.items[_i2].height || this.tombstoneHeight;\n  }\n\n  this.scroller.maxScrollY = -(curPos - this.scroller.wrapperHeight + (this.hasMore ? DEFAULT_SCROLL_RUNWAY : 0));\n\n  var tombstoneAnimationsHandler = setTimeout(function () {\n    for (var _i3 in tombstoneAnimations) {\n      var _animation2 = tombstoneAnimations[_i3];\n      _animation2[0].style.display = 'none';\n      // Tombstone can be recycled now.\n      _this4.tombstones.push(_animation2[0]);\n    }\n  }, ANIMATION_DURATION_MS);\n\n  this.tombstonesAnimationHandlers.push(tombstoneAnimationsHandler);\n};\n\nInfiniteScroller.prototype._getTombStone = function () {\n  var tombstone = this.tombstones.pop();\n  if (tombstone) {\n    tombstone.style.display = '';\n    tombstone.style.opacity = 1;\n    tombstone.style[style.transform] = '';\n    tombstone.style[style.transition] = '';\n    return tombstone;\n  }\n  return this.options.createTombstone();\n};\n\nInfiniteScroller.prototype._addItem = function () {\n  this.items.push({\n    data: null,\n    node: null,\n    height: 0,\n    width: 0,\n    top: 0\n  });\n};\n\nInfiniteScroller.prototype._calculateAnchoredItem = function (initialAnchor, delta) {\n  if (delta === 0) {\n    return initialAnchor;\n  }\n  var i = initialAnchor.index;\n  var tombstones = 0;\n\n  delta += initialAnchor.offset;\n  if (delta < 0) {\n    while (delta < 0 && i > 0 && this.items[i - 1].height) {\n      delta += this.items[i - 1].height;\n      i--;\n    }\n    tombstones = Math.max(-i, Math.ceil(Math.min(delta, 0) / this.tombstoneHeight));\n  } else {\n    while (delta > 0 && i < this.items.length && this.items[i].height && this.items[i].height < delta) {\n      delta -= this.items[i].height;\n      i++;\n    }\n    if (i >= this.items.length || !this.items[i].height) {\n      tombstones = Math.floor(Math.max(delta, 0) / this.tombstoneHeight);\n    }\n  }\n  i += tombstones;\n  delta -= tombstones * this.tombstoneHeight;\n\n  return {\n    index: i,\n    offset: delta\n  };\n};\n\nfunction BScroll(el, options) {\n  this.wrapper = typeof el === 'string' ? document.querySelector(el) : el;\n  if (!this.wrapper) {\n    warn('Can not resolve the wrapper DOM.');\n  }\n  this.scroller = this.wrapper.children[0];\n  if (!this.scroller) {\n    warn('The wrapper need at least one child element to be scroller.');\n  }\n  // cache style for better performance\n  this.scrollerStyle = this.scroller.style;\n\n  this._init(options);\n}\n\ninitMixin(BScroll);\ncoreMixin(BScroll);\neventMixin(BScroll);\nsnapMixin(BScroll);\nwheelMixin(BScroll);\nscrollbarMixin(BScroll);\npullDownMixin(BScroll);\npullUpMixin(BScroll);\nmouseWheelMixin(BScroll);\nzoomMixin(BScroll);\ninfiniteMixin(BScroll);\n\nBScroll.Version = '1.15.1';\n\nexport default BScroll;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_better-scroll@1.15.1@better-scroll/dist/bscroll.esm.js\n// module id = 10\n// module chunks = 0","import range from './range'\n\nexport default [range(0, 23, true, '点'), range(0, 59, true, '分'), range(0, 59, true, '秒')]\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/data/time.js","import range from './range'\n\nconst START_YEAR = 1900\nconst END_YEAR = 2100\n\nconst UNIT_YEAR = '年'\nconst UNIT_MONTH = '月'\nconst UNIT_DAY = '日'\n\nfunction isLeapYear (y) {\n  return (y % 4 === 0) && (y % 100 !== 0 || y % 400 === 0)\n};\n\nfunction getDays (y, m) {\n  y = Number(y)\n  m = Number(m)\n  let endDay = null\n  switch (m) {\n    case 2:\n      endDay = isLeapYear(y) ? 29 : 28; break\n    case 1:\n    case 3:\n    case 5:\n    case 7:\n    case 8:\n    case 10:\n    case 12:\n      endDay = 31; break\n    case 4:\n    case 6:\n    case 9:\n    case 11:\n    default:\n      endDay = 30; break\n  }\n  const days = range(1, endDay, false, UNIT_DAY)\n  return days.map((day) => {\n    return { value: day }\n  })\n};\n\nconst yearData = range(START_YEAR, END_YEAR, false, UNIT_YEAR)\nconst monthData = range(1, 12, false, UNIT_MONTH)\n\nconst cascadeMonthData = monthData.map((month) => {\n  return {\n    value: month,\n    children: []\n  }\n})\n\nconst dateData = yearData.map((year) => {\n  const item = {\n    value: year,\n    children: cascadeMonthData.slice()\n  }\n  item.children.forEach((month) => {\n    month.children = getDays(year.slice(0, -1), month.value.slice(0, -1))\n  })\n  return item\n})\n\nconst date = new Date()\nconst dateAnchor = [\n  { value: `${date.getFullYear()}${UNIT_YEAR}` },\n  { value: `${date.getMonth() + 1}${UNIT_MONTH}` },\n  { value: `${date.getDate()}${UNIT_DAY}` }\n]\n\nexport {\n  dateAnchor,\n  dateData\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/data/date.js","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"mask\",on:{\"click\":_vm.hide}})]),_vm._v(\" \"),_c('transition',{attrs:{\"name\":\"slide\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.display),expression:\"display\"}],staticClass:\"picker\"},[_c('div',{staticClass:\"picker-title\"},[_c('span',{staticClass:\"pt-cancel\",style:({ color: _vm.colorCancel }),on:{\"click\":_vm.cancel}},[_vm._v(_vm._s(_vm.textCancel))]),_vm._v(\" \"),_c('span',{staticClass:\"pt-submit\",style:({ color: _vm.colorConfirm }),on:{\"click\":_vm.confirm}},[_vm._v(_vm._s(_vm.textConfirm))]),_vm._v(\" \"),_vm._t(\"default\")],2),_vm._v(\" \"),_c('div',{staticClass:\"picker-panel\"},[_c('div',{staticClass:\"picker-mask-top\"}),_vm._v(\" \"),_c('div',{staticClass:\"picker-mask-bottom\"}),_vm._v(\" \"),_c('div',{ref:\"wheelWrapper\",staticClass:\"picker-wheel-wrapper\"},_vm._l((_vm.pickerData),function(wheel,index){return _c('div',{key:index,staticClass:\"picker-wheel\"},[_c('ul',{staticClass:\"wheel-scroll\"},_vm._l((wheel),function(item,index){return _c('li',{key:index,staticClass:\"wheel-item\"},[_vm._v(_vm._s(item))])}),0)])}),0)])])])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/_vue-loader@13.7.3@vue-loader/lib/template-compiler?{\"id\":\"data-v-d86a61f6\",\"hasScoped\":true,\"buble\":{\"transforms\":{}}}!./node_modules/_vue-loader@13.7.3@vue-loader/lib/selector.js?type=template&index=0!./src/lib/vue-awesome-picker.vue\n// module id = 13\n// module chunks = 0"],"sourceRoot":""}