UNPKG

quarkd

Version:

Mobile UI Components built on Web Components.

7 lines (6 loc) 6.27 kB
/*! * better-scroll / wheel * (c) 2016-2021 ustbhuangyi * Released under the MIT License. */ var e="undefined"!=typeof window,t=e&&navigator.userAgent.toLowerCase();t&&/wechatdevtools/.test(t),t&&t.indexOf("android"),function(){if("string"==typeof t){var e=/os (\d\d?_\d(_\d)?)/.exec(t);if(!e)return!1;var o=e[1].split("_").map((function(e){return parseInt(e,10)}));return!!(13===o[0]&&o[1]>=4)}}();if(e){try{var o={};Object.defineProperty(o,"passive",{get:function(){!0}}),window.addEventListener("test-passive",(function(){}),o)}catch(e){}}var n=e&&document.createElement("div").style,s=function(){if(!e)return!1;for(var t=0,o=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}];t<o.length;t++){var s=o[t];if(void 0!==n[s.value])return s.key}return!1}();function i(e){return!1===s?e:"standard"===s?"transitionEnd"===e?"transitionend":e:s+e.charAt(0).toUpperCase()+e.substr(1)}s&&"standard"!==s&&s.toLowerCase();var r=i("transform");i("transition");e&&i("perspective");var l=r,a=i("transitionTimingFunction"),h=i("transitionDuration");i("transitionDelay"),i("transformOrigin"),i("transitionEnd"),i("transitionProperty");function c(e,t){return new RegExp("(^|\\s)"+t+"(\\s|$)").test(e.className)}var d={style:"cubic-bezier(0.23, 1, 0.32, 1)",fn:function(e){return 1+--e*e*e*e*e}},u=[{key:"wheelTo",name:"wheelTo"},{key:"getSelectedIndex",name:"getSelectedIndex"},{key:"restorePosition",name:"restorePosition"}].map((function(e){return{key:e.key,sourceKey:"plugins.wheel."+e.name}})),p=4,f=function(){function e(e){this.scroll=e,this.init()}return e.prototype.init=function(){this.handleBScroll(),this.handleOptions(),this.handleHooks(),this.refreshBoundary(),this.setSelectedIndex(this.options.selectedIndex)},e.prototype.handleBScroll=function(){this.scroll.proxy(u),this.scroll.registerType(["wheelIndexChanged"])},e.prototype.handleOptions=function(){var e=!0===this.scroll.options.wheel?{}:this.scroll.options.wheel;this.options=function(e,t){for(var o in t)e[o]=t[o];return e}({wheelWrapperClass:"wheel-scroll",wheelItemClass:"wheel-item",rotate:25,adjustTime:400,selectedIndex:0,wheelDisabledItemClass:"wheel-disabled-item"},e)},e.prototype.handleHooks=function(){var e=this,t=this.scroll,o=this.scroll.scroller,n=o.actionsHandler,s=o.scrollBehaviorX,i=o.scrollBehaviorY,r=o.animater,l=o.content;t.on(t.eventTypes.scrollEnd,(function(t){var n=e.findNearestValidWheel(t.y).index;if(o.animater.forceStopped&&!e.isAdjustingPosition)return e.target=e.items[n],!0;e.setSelectedIndex(n),e.isAdjustingPosition&&(e.isAdjustingPosition=!1)})),this.scroll.hooks.on(this.scroll.hooks.eventTypes.refresh,(function(t){t!==l&&(l=t,e.setSelectedIndex(e.options.selectedIndex,!0)),e.rotateX(e.scroll.y),e.wheelTo(e.selectedIndex,0)})),this.scroll.hooks.on(this.scroll.hooks.eventTypes.beforeInitialScrollTo,(function(t){t.x=0,t.y=-e.selectedIndex*e.itemHeight})),o.hooks.on(o.hooks.eventTypes.checkClick,(function(){var t,o=(t=e.items,Array.prototype.slice.call(t,0)).indexOf(e.target);return-1===o||e.wheelTo(o,e.options.adjustTime,d),!0})),o.hooks.on(o.hooks.eventTypes.scrollTo,(function(t){t.y=e.findNearestValidWheel(t.y).y})),o.hooks.on(o.hooks.eventTypes.minDistanceScroll,(function(){var e=o.animater;!0===e.forceStopped&&(e.forceStopped=!1)})),o.hooks.on(o.hooks.eventTypes.scrollToElement,(function(t,o){if(!c(t,e.options.wheelItemClass))return!0;o.top=e.findNearestValidWheel(o.top).y})),n.hooks.on(n.hooks.eventTypes.beforeStart,(function(t){e.target=t.target})),s.hooks.on(s.hooks.eventTypes.computeBoundary,(function(e){e.maxScrollPos=0,e.minScrollPos=0})),i.hooks.on(i.hooks.eventTypes.computeBoundary,(function(t){e.items=e.scroll.scroller.content.children,e.checkWheelAllDisabled(),e.itemHeight=e.items.length>0?i.contentSize/e.items.length:0,t.maxScrollPos=-e.itemHeight*(e.items.length-1),t.minScrollPos=0})),i.hooks.on(i.hooks.eventTypes.momentum,(function(t){t.rate=p,t.destination=e.findNearestValidWheel(t.destination).y})),i.hooks.on(i.hooks.eventTypes.end,(function(t){var o=e.findNearestValidWheel(i.currentPos);t.destination=o.y,t.duration=e.options.adjustTime})),r.hooks.on(r.hooks.eventTypes.time,(function(t){e.transitionDuration(t)})),r.hooks.on(r.hooks.eventTypes.timeFunction,(function(t){e.timeFunction(t)})),r.hooks.on(r.hooks.eventTypes.callStop,(function(){var t=e.findNearestValidWheel(e.scroll.y).index;e.isAdjustingPosition=!0,e.wheelTo(t,0)})),r.translater.hooks.on(r.translater.hooks.eventTypes.translate,(function(t){e.rotateX(t.y)}))},e.prototype.refreshBoundary=function(){var e=this.scroll.scroller,t=e.scrollBehaviorX,o=e.scrollBehaviorY,n=e.content;t.refresh(n),o.refresh(n)},e.prototype.setSelectedIndex=function(e,t){void 0===t&&(t=!1);var o=this.selectedIndex;this.selectedIndex=e,o===e||t||this.scroll.trigger("wheelIndexChanged",e)},e.prototype.getSelectedIndex=function(){return this.selectedIndex},e.prototype.wheelTo=function(e,t,o){void 0===e&&(e=0),void 0===t&&(t=0);var n=-e*this.itemHeight;this.scroll.scrollTo(0,n,t,o)},e.prototype.restorePosition=function(){if(this.scroll.pending){var e=this.getSelectedIndex();this.scroll.scroller.animater.clearTimer(),this.wheelTo(e,0)}},e.prototype.transitionDuration=function(e){for(var t=0;t<this.items.length;t++)this.items[t].style[h]=e+"ms"},e.prototype.timeFunction=function(e){for(var t=0;t<this.items.length;t++)this.items[t].style[a]=e},e.prototype.rotateX=function(e){for(var t=this.options.rotate,o=void 0===t?25:t,n=0;n<this.items.length;n++){var s=(o*(e/this.itemHeight+n)).toFixed(3);this.items[n].style[l]="rotateX("+s+"deg)"}},e.prototype.findNearestValidWheel=function(e){e=e>0?0:e<this.scroll.maxScrollY?this.scroll.maxScrollY:e;for(var t=Math.abs(Math.round(-e/this.itemHeight)),o=t,n=this.items,s=this.options.wheelDisabledItemClass;t>=0&&c(n[t],s);)t--;if(t<0)for(t=o;t<=n.length-1&&c(n[t],s);)t++;return t===n.length&&(t=o),{index:this.wheelItemsAllDisabled?-1:t,y:-t*this.itemHeight}},e.prototype.checkWheelAllDisabled=function(){var e=this.options.wheelDisabledItemClass,t=this.items;this.wheelItemsAllDisabled=!0;for(var o=0;o<t.length;o++)if(!c(t[o],e)){this.wheelItemsAllDisabled=!1;break}},e.pluginName="wheel",e}();export{f as W};