forked from lazd/iNoBounce
-
Notifications
You must be signed in to change notification settings - Fork 0
/
inobounce.min.js
10 lines (10 loc) · 2.12 KB
/
inobounce.min.js
1
2
3
4
5
6
7
8
9
10
(function(global){var startY=0;var enabled=!1;var supportsPassiveOption=!1;try{var opts=Object.defineProperty({},'passive',{get:function(){supportsPassiveOption=!0}});window.addEventListener('test',null,opts)}catch(e){}
var handleTouchmove=function(evt){var el=evt.target;while(el!==document.body&&el!==document){var style=window.getComputedStyle(el);if(!style){break}
if(el.nodeName==='INPUT'&&el.getAttribute('type')==='range'){return}
var scrolling=style.getPropertyValue('-webkit-overflow-scrolling');var overflowY=style.getPropertyValue('overflow-y');var height=parseInt(style.getPropertyValue('height'),10);var isScrollable=scrolling==='touch'&&(overflowY==='auto'||overflowY==='scroll');var canScroll=el.scrollHeight>el.offsetHeight;if(isScrollable&&canScroll){var curY=evt.touches?evt.touches[0].screenY:evt.screenY;var isAtTop=(startY<=curY&&el.scrollTop===0);var isAtBottom=(startY>=curY&&el.scrollHeight-el.scrollTop===height);if(isAtTop||isAtBottom){evt.preventDefault()}
return}
el=el.parentNode}
evt.preventDefault()};var handleTouchstart=function(evt){startY=evt.touches?evt.touches[0].screenY:evt.screenY};var enable=function(){window.addEventListener('touchstart',handleTouchstart,supportsPassiveOption?{passive:!1}:!1);window.addEventListener('touchmove',handleTouchmove,supportsPassiveOption?{passive:!1}:!1);enabled=!0};var disable=function(){window.removeEventListener('touchstart',handleTouchstart,!1);window.removeEventListener('touchmove',handleTouchmove,!1);enabled=!1};var isEnabled=function(){return enabled};var testDiv=document.createElement('div');document.documentElement.appendChild(testDiv);testDiv.style.WebkitOverflowScrolling='touch';var scrollSupport='getComputedStyle' in window&&window.getComputedStyle(testDiv)['-webkit-overflow-scrolling']==='touch';document.documentElement.removeChild(testDiv);if(scrollSupport){enable()}
var iNoBounce={enable:enable,disable:disable,isEnabled:isEnabled};if(typeof module!=='undefined'&&module.exports){module.exports=iNoBounce}
if(typeof global.define==='function'){(function(define){define('iNoBounce',[],function(){return iNoBounce})}(global.define))}
else{global.iNoBounce=iNoBounce}}(this))