@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
3 lines (2 loc) • 10.5 kB
JavaScript
!function(e,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports,require("kendo.fx.js"),require("kendo.draganddrop.js")):"function"==typeof define&&define.amd?define(["exports","kendo.fx.min","kendo.draganddrop.min"],i):i(((e="undefined"!=typeof globalThis?globalThis:e||self).kendo=e.kendo||{},e.kendo._globals=e.kendo._globals||{},e.kendo._globals.MobileScroller={}))}(this,(function(e){!function(e){var i=window.kendo,n=i.mobile,t=i.effects,s=n.ui,o=e.extend,l=s.Widget,a=i.Class,r=i.ui.Movable,c=i.ui.Pane,d=i.ui.PaneDimensions,h=t.Transition,u=t.Animation,m=Math.abs,f="km-scroller-release",p="km-scroller-refresh",v="change",b="scroll",x=u.extend({init:function(e){var i=this;u.fn.init.call(i),o(i,e),i.userEvents.bind("gestureend",i.start.bind(i)),i.tapCapture.bind("press",i.cancel.bind(i))},enabled:function(){return this.movable.scale<this.dimensions.minScale},done:function(){return this.dimensions.minScale-this.movable.scale<.01},tick:function(){var e=this.movable;e.scaleWith(1.1),this.dimensions.rescale(e.scale)},onEnd:function(){var e=this.movable;e.scaleTo(this.dimensions.minScale),this.dimensions.rescale(e.scale)}}),y=u.extend({init:function(e){var i=this;u.fn.init.call(i),o(i,e,{transition:new h({axis:e.axis,movable:e.movable,onEnd:function(){i._end()}})}),i.tapCapture.bind("press",(function(){i.cancel()})),i.userEvents.bind("end",i.start.bind(i)),i.userEvents.bind("gestureend",i.start.bind(i)),i.userEvents.bind("tap",i.onEnd.bind(i))},onCancel:function(){this.transition.cancel()},freeze:function(e){this.cancel(),this._moveTo(e)},onEnd:function(){var e=this;e.paneAxis.outOfBounds()?e._snapBack():e._end()},done:function(){return m(this.velocity)<1},start:function(e){var i,n=this;n.dimension.enabled&&(n.paneAxis.outOfBounds()?n.transition._started?(n.transition.cancel(),n.velocity=Math.min(e.touch[n.axis].velocity*n.velocityMultiplier,55),u.fn.start.call(n)):n._snapBack():(i=2===e.touch.id?0:e.touch[n.axis].velocity,n.velocity=Math.max(Math.min(i*n.velocityMultiplier,55),-55),n.tapCapture.captureNext(),u.fn.start.call(n)))},tick:function(){var e=this,i=e.dimension,n=e.paneAxis.outOfBounds()?.5:e.friction,t=e.velocity*=n,s=e.movable[e.axis]+t;!e.elastic&&i.outOfBounds(s)&&(s=Math.max(Math.min(s,i.max),i.min),e.velocity=0),e.movable.moveAxis(e.axis,s)},_end:function(){this.tapCapture.cancelCapture(),this.end()},_snapBack:function(){var e=this,i=e.dimension,n=e.movable[e.axis]>i.max?i.max:i.min;e._moveTo(n)},_moveTo:function(e){this.transition.moveTo({location:e,duration:500,ease:h.easeOutExpo})}}),T=u.extend({init:function(e){i.effects.Animation.fn.init.call(this),o(this,e,{origin:{},destination:{},offset:{}})},tick:function(){this._updateCoordinates(),this.moveTo(this.origin)},done:function(){return m(this.offset.y)<5&&m(this.offset.x)<5},onEnd:function(){this.moveTo(this.destination),this.callback&&this.callback.call()},setCoordinates:function(e,i){this.offset={},this.origin=e,this.destination=i},setCallback:function(e){e&&i.isFunction(e)?this.callback=e:e=undefined},_updateCoordinates:function(){this.offset={x:(this.destination.x-this.origin.x)/4,y:(this.destination.y-this.origin.y)/4},this.origin={y:this.origin.y+this.offset.y,x:this.origin.x+this.offset.x}}}),_=a.extend({init:function(i){var n=this,t="x"===i.axis,s=e('<div role="scrollbar" aria-controls="'+i.controlsId+'" class="km-touch-scrollbar km-'+(t?"horizontal":"vertical")+'-scrollbar" />');t&&s.attr("aria-orientation","horizontal"),o(n,i,{element:s,elementSize:0,movable:new r(s),scrollMovable:i.movable,alwaysVisible:i.alwaysVisible,size:t?"width":"height"}),n.scrollMovable.bind(v,n.refresh.bind(n)),n.container.append(s),i.alwaysVisible&&n.show()},refresh:function(){var e=this,i=e.axis,n=e.dimension,t=n.size,s=e.scrollMovable,o=t/n.total,l=Math.round(-s[i]*o),a=Math.round(t*o);o>=1?this.element.css("display","none"):this.element.css("display",""),l+a>t?a=t-l:l<0&&(a+=l,l=0),e.elementSize!=a&&(e.element.css(e.size,a+"px"),e.elementSize=a),e._ariaValue(l,n.size-e.elementSize),e.movable.moveAxis(i,l)},show:function(){this.element.css({opacity:.7,visibility:"visible"})},hide:function(){this.alwaysVisible||this.element.css({opacity:0})},_ariaValue:function(e,i){var n=this.element;e>i&&(e=i),n.attr("aria-valuemax",i),n.attr("aria-valuenow",e)}}),g=l.extend({init:function(n,t){var s=this;if(l.fn.init.call(s,n,t),n=s.element,s._native=s.options.useNative&&i.support.hasNativeScrolling,s._native)return n.addClass("km-native-scroller").prepend('<div class="km-scroll-header"/>'),void o(s,{scrollElement:n,fixedContainer:n.children().first()});n.css("overflow","hidden").addClass("km-scroll-wrapper").wrapInner('<div class="km-scroll-container"/>').prepend('<div class="km-scroll-header"/>');var a=n.children().eq(1),h=new i.TapCapture(n),u=new r(a),f=new d({element:a,container:n,forcedEnabled:s.options.zoom}),p=this.options.avoidScrolling,y=new i.UserEvents(n,{touchAction:"pan-y",fastTap:!0,allowSelection:!0,preventDragEvent:!0,captureUpIfMoved:!0,multiTouch:s.options.zoom,supportDoubleTap:s.options.supportDoubleTap,start:function(i){f.refresh();var n=m(i.x.velocity),t=m(i.y.velocity),o=2*n>=t,l=2*t>=n;!e.contains(s.fixedContainer[0],i.event.target)&&!p(i)&&s.enabled&&(f.x.enabled&&o||f.y.enabled&&l)?y.capture():y.cancel()}}),_=new c({movable:u,dimensions:f,userEvents:y,elastic:s.options.elastic}),g=new x({movable:u,dimensions:f,userEvents:y,tapCapture:h}),w=new T({moveTo:function(e){s.scrollTo(e.x,e.y)}});u.bind(v,(function(){s.scrollTop=-u.y,s.scrollLeft=-u.x,s.trigger(b,{scrollTop:s.scrollTop,scrollLeft:s.scrollLeft})})),s.options.mousewheelScrolling&&n.on("DOMMouseScroll mousewheel",this._wheelScroll.bind(this)),o(s,{movable:u,dimensions:f,zoomSnapBack:g,animatedScroller:w,userEvents:y,pane:_,tapCapture:h,pulled:!1,enabled:!0,scrollElement:a,scrollTop:0,scrollLeft:0,fixedContainer:n.children().first()}),s._initAxis("x"),s._initAxis("y"),s._wheelEnd=function(){s._wheel=!1,s.userEvents.end(0,s._wheelY)},f.refresh(),s.options.pullToRefresh&&s._initPullToRefresh()},_wheelScroll:function(e){if(!e.ctrlKey){this._wheel||(this._wheel=!0,this._wheelY=0,this.userEvents.press(0,this._wheelY)),clearTimeout(this._wheelTimeout),this._wheelTimeout=setTimeout(this._wheelEnd,50);var n=i.wheelDeltaY(e);n&&(this._wheelY+=n,this.userEvents.move(0,this._wheelY)),e.preventDefault()}},makeVirtual:function(){this.dimensions.y.makeVirtual()},virtualSize:function(e,i){this.dimensions.y.virtualSize(e,i)},height:function(){return this.dimensions.y.size},scrollHeight:function(){return this.scrollElement[0].scrollHeight},scrollWidth:function(){return this.scrollElement[0].scrollWidth},options:{name:"Scroller",zoom:!1,pullOffset:140,visibleScrollHints:!1,elastic:!0,useNative:!1,mousewheelScrolling:!0,avoidScrolling:function(){return!1},pullToRefresh:!1,messages:{pullTemplate:"Pull to refresh",releaseTemplate:"Release to refresh",refreshTemplate:"Refreshing"}},events:["pull",b,"resize"],_resize:function(){this._native||this.contentResized()},setOptions:function(e){l.fn.setOptions.call(this,e),e.pullToRefresh&&this._initPullToRefresh()},reset:function(){this._native?this.scrollElement.scrollTop(0):(this.movable.moveTo({x:0,y:0}),this._scale(1))},contentResized:function(){this.dimensions.refresh(),this.pane.x.outOfBounds()&&this.movable.moveAxis("x",this.dimensions.x.min),this.pane.y.outOfBounds()&&this.movable.moveAxis("y",this.dimensions.y.min)},zoomOut:function(){var e=this.dimensions;e.refresh(),this._scale(e.fitScale),this.movable.moveTo(e.centerCoordinates())},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},scrollTo:function(e,n){this._native?(i.scrollLeft(this.scrollElement,m(e)),this.scrollElement.scrollTop(m(n))):(this.dimensions.refresh(),this.movable.moveTo({x:e,y:n}))},animatedScrollTo:function(e,i,n){var t,s;this._native?this.scrollTo(e,i):(t={x:this.movable.x,y:this.movable.y},s={x:e,y:i},this.animatedScroller.setCoordinates(t,s),this.animatedScroller.setCallback(n),this.animatedScroller.start())},pullHandled:function(){var e=this;e.refreshHint.removeClass(p),e.hintContainer.html(e.pullTemplate({})),e.yinertia.onEnd(),e.xinertia.onEnd(),e.userEvents.cancel()},destroy:function(){l.fn.destroy.call(this),this.userEvents&&this.userEvents.destroy()},_scale:function(e){this.dimensions.rescale(e),this.movable.scaleTo(e)},_initPullToRefresh:function(){var e=this;e.dimensions.y.forceEnabled(),e.pullTemplate=i.template(e.options.messages.pullTemplate),e.releaseTemplate=i.template(e.options.messages.releaseTemplate),e.refreshTemplate=i.template(e.options.messages.refreshTemplate),e.scrollElement.prepend('<span class="km-scroller-pull"><span class="km-icon"></span><span class="km-loading-left"></span><span class="km-loading-right"></span><span class="km-template">'+e.pullTemplate({})+"</span></span>"),e.refreshHint=e.scrollElement.children().first(),e.hintContainer=e.refreshHint.children(".km-template"),e.pane.y.bind("change",e._paneChange.bind(e)),e.userEvents.bind("end",e._dragEnd.bind(e))},_dragEnd:function(){var e=this;e.pulled&&(e.pulled=!1,e.refreshHint.removeClass(f).addClass(p),e.hintContainer.html(e.refreshTemplate({})),e.yinertia.freeze(e.options.pullOffset/2),e.trigger("pull"))},_paneChange:function(){var e=this;e.movable.y/.5>e.options.pullOffset?e.pulled||(e.pulled=!0,e.refreshHint.removeClass(p).addClass(f),e.hintContainer.html(e.releaseTemplate({}))):e.pulled&&(e.pulled=!1,e.refreshHint.removeClass(f),e.hintContainer.html(e.pullTemplate({})))},_initAxis:function(e){var n,t=this,s=t.element.attr("id"),o=t.movable,l=t.dimensions[e],a=t.tapCapture,r=t.pane[e];s||(s=i.guid(),t.element.attr("id",s)),n=new _({axis:e,movable:o,dimension:l,container:t.element,alwaysVisible:t.options.visibleScrollHints,controlsId:s}),l.bind(v,(function(){n.refresh()})),r.bind(v,(function(){n.show()})),t[e+"inertia"]=new y({axis:e,paneAxis:r,movable:o,tapCapture:a,userEvents:t.userEvents,dimension:l,elastic:t.options.elastic,friction:t.options.friction||.96,velocityMultiplier:t.options.velocityMultiplier||10,end:function(){n.hide(),t.trigger("scrollEnd",{axis:e,scrollTop:t.scrollTop,scrollLeft:t.scrollLeft})}})}});s.plugin(g)}(window.kendo.jQuery);var i=kendo;e.__meta__={id:"mobile.scroller",name:"Scroller",category:"mobile",description:"The Kendo Mobile Scroller widget enables touch friendly kinetic scrolling for the contents of a given DOM element.",depends:["fx","draganddrop"]},e.default=i,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=kendo.mobile.scroller.min.js.map