var stopScrollThrough = {
pos: {
x: 0,
y: 0
},
stopEvent: function (e) {
e.preventDefault()
e.stopPropagation()
},
startPosition: function (e) {
stopScrollThrough.pos.x = e.touches[0].clientX;
stopScrollThrough.pos.y = e.touches[0].clientY;
},
watchTouchMove: function (e) {
var target = e.target,
parents = $(target).parents('.mobileScrollBox'),
el = null;
if (target.classList.contains('.mobileScrollBox')) {
el = target;
} else if (parents.length) {
el = parents[0];
} else {
return stopScrollThrough.stopEvent(e);
}
var dx = e.touches[0].clientX - stopScrollThrough.pos.x,
dy = e.touches[0].clientY - stopScrollThrough.pos.y,
direction = dy > 0 ? '10' : '01',
scrollTop = el.scrollTop,
scrollHeight = el.scrollHeight,
offsetHeight = el.offsetHeight,
isVertical = Math.abs(dx) < Math.abs(dy),
status = '11';
if (scrollTop == 0) {
status = offsetHeight >= scrollHeight ? '00' : '01'
} else if (scrollTop + offsetHeight >= scrollHeight) {
status = '10'
}
if (status !== '11' && isVertical && !(parseInt(status, 2) & parseInt(direction, 2))) {
return stopScrollThrough.stopEvent(e);
}
},
startStopScroll: function (e) {
document.addEventListener('touchstart', stopScrollThrough.startPosition, { passive: false });
document.addEventListener('touchmove', stopScrollThrough.watchTouchMove, { passive: false });
},
removeStopScroll: function (e) {
document.removeEventListener('touchstart', stopScrollThrough.startPosition, { passive: false });
document.removeEventListener('touchmove', stopScrollThrough.watchTouchMove, { passive: false });
}
}