pull2refresh
Version:
Pull to refresh library
2 lines (1 loc) • 2.44 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.pull2refresh=e()}(this,function(){"use strict";return function(){function t(t){this.startY=null,this.refreshInProgress=!1,this.options=t,this.options.refreshElement.style.display="block",this.maxHeight=this.computeOffsetHeight(t.refreshElement),this.initalMarginTop=this.computeMarginTop(this.options.pullableElement),this.options.threshold||(this.options.threshold=this.maxHeight),this.reset(),this.options.pullableElement.addEventListener("touchstart",this.start.bind(this)),this.options.pullableElement.addEventListener("mousedown",this.start.bind(this)),document.addEventListener("touchmove",this.move.bind(this)),document.addEventListener("mousemove",this.move.bind(this)),document.addEventListener("touchend",this.end.bind(this)),document.addEventListener("mouseup",this.end.bind(this))}return t.prototype.done=function(){this.refreshInProgress=!1,this.reset()},t.prototype.reset=function(){this.startY=null,this.options.pullableElement.style.marginTop=this.initalMarginTop-this.maxHeight+"px"},t.prototype.start=function(t){this.isScrollToTop()&&(this.refreshInProgress||(this.reset(),this.startY=this.pageY(t)))},t.prototype.move=function(t){if(null!==this.startY&&!this.refreshInProgress){var e=this.pageY(t)-this.startY;if(!(e<=0)){var s=this.maxHeight-e;if(s<0&&(s=0),this.options.pullableElement.style.marginTop=-s+"px",this.options.onPull&&this.options.threshold){var i=e/this.options.threshold;this.options.onPull(i>1?1:i)}}}},t.prototype.end=function(t){if(!this.refreshInProgress){if(null!==this.startY){var e=this.pageY(t)-this.startY;if(this.options.threshold&&e>=this.options.threshold)return this.refreshInProgress=!0,void this.options.onRefresh()}this.reset()}},t.prototype.pageY=function(t){return t instanceof MouseEvent?t.pageY:t.touches&&t.touches.length?t.touches[t.touches.length-1].pageY:0},t.prototype.computeOffsetHeight=function(t){if(t.offsetHeight)return t.offsetHeight;var e=window.getComputedStyle(t).height;if(!e)return 0;var s=parseInt(e,10);return isNaN(s)?0:s},t.prototype.computeMarginTop=function(t){var e=parseInt(window.getComputedStyle(t).getPropertyValue("margin-top"),10);return isNaN(e)?0:e},t.prototype.isScrollToTop=function(){return this.options.pullableElement.getBoundingClientRect().top===this.computeMarginTop(this.options.pullableElement)},t}()});