swipepackage
Version:
An npm package for making scrollable divs scroll horizontally and vertically
108 lines (98 loc) • 2.88 kB
JavaScript
const getEventType = () => {
let hasTouchscreen = 'ontouchstart' in window;
let swipeStart;
let swipeUp;
let swipeMove;
if(hasTouchscreen){
swipeStart = 'touchstart';
swipeUp = 'touchend';
swipeMove = 'touchmove';
}
else{
swipeStart = 'mousedown';
swipeUp = 'mouseup';
swipeMove = 'mousemove';
}
return{
swipeStart,
swipeUp,
swipeMove,
}
}
const swipeHorizontally = (slider,speed) => {
let isDown = false;
let startX;
let scrollLeft;
let mousePos;
slider.addEventListener(getEventType().swipeStart, (e) => {
/* Get mouse position based on event type*/
if(getEventType().swipeStart === "touchstart"){
mousePos = e.changedTouches[0].pageX;
}
else{
mousePos = e.clientX;
}
isDown = true;
startX = mousePos - slider.offsetLeft;
scrollLeft = slider.scrollLeft;
});
slider.addEventListener(getEventType().swipeUp, () => {
isDown = false;
});
slider.addEventListener(getEventType().swipeMove, (e) => {
/* Get mouse position based on event type*/
if(getEventType().swipeMove === "touchmove"){
mousePos = e.changedTouches[0].pageX;
}
else{
mousePos = e.clientX;
}
if(!isDown) return;
e.preventDefault();
const x = mousePos - slider.offsetLeft;
const moveBy = (startX - x) * speed;
slider.scrollLeft = scrollLeft + moveBy;
});
return true;
}
const swipeVertically = (slider,speed) => {
let isDown = false;
let startX;
let scrollTop;
let mousePos;
slider.addEventListener(getEventType().swipeStart, (e) => {
/* Get mouse position */
if(getEventType().swipeStart === "touchstart"){
mousePos = e.changedTouches[0].pageY;
}
else{
mousePos = e.clientY;
}
isDown = true;
startX = mousePos - slider.scrollTop;
scrollTop = slider.scrollTop;
});
slider.addEventListener(getEventType().swipeUp, () => {
isDown = false;
});
slider.addEventListener(getEventType().swipeMove, (e) => {
/* Get mouse position */
if(getEventType().swipeMove === "touchmove"){
mousePos = e.changedTouches[0].pageY;
}
else{
mousePos = e.clientY;
}
if(!isDown) return;
e.preventDefault();
const x = mousePos - slider.scrollTop;
const moveBy = (startX - x) * speed;
slider.scrollTop = scrollTop + moveBy;
});
return true;
}
module.exports = {
swipeHorizontally,
swipeVertically,
getEventType
};