Detecting javascript touch gestures

Photo by Yoann Boyer on Unsplash

Detecting javascript touch gestures

In this guide, you will learn how to capture touch events from mobile devices like swiping left, right, up, and Down.

Create a file called touch.js and copy & paste the following code snippet

const Touch = {
    state: {
      xDown:null,
      yDown:null
    },
    getTouches: (evt) => {
      return evt.touches ||             // browser API
             evt.originalEvent.touches; // jQuery
    },

    handleTouchStart: (evt) => {
        let firstTouch = Touch.getTouches(evt)[0];
        Touch.state.xDown = firstTouch.clientX;
        Touch.state.yDown = firstTouch.clientY;
    },

    handleTouchMove: (evt) => {
        let action = null;
        let {xDown,yDown} = Touch.state;
        if ( ! xDown || ! yDown ) {
            return;
        }

        let xUp = evt.touches[0].clientX;
        let yUp = evt.touches[0].clientY;

        let xDiff = xDown - xUp;
        let yDiff = yDown - yUp;

        if ( Math.abs( xDiff ) > Math.abs( yDiff ) ) {/*most significant*/
            if ( xDiff > 0 ) {
                /* left swipe */
                action =  'left';
            } else {
                /* right swipe */
                action = 'right';
            }
        } else {
            if ( yDiff > 0 ) {
                /* up swipe */
                action = 'up';
            } else {
                /* down swipe */
                action = 'down';
            }
        }
        /* reset values */
        Touch.state.xDown = null;
        Touch.state.yDown = null;
        return action;
    }
}

export default Touch;

Now link this file in your HTML template using a script tag.

<script type="text/javascript" src="./touch.js" type="text/javascript"></script>

In javascript, use this to capture events

document.addEventListener('touchstart', Touch.handleTouchStart, false);        
document.addEventListener('touchmove', Touch.handleTouchMove, false);

If you are using React, you can capture events like this:

<img
                           onTouchStart={(e)=>Touch.handleTouchStart(e)}
                            onTouchMove={(e)=>{
                                let action = Touch.handleTouchMove(e);
                                if(action == 'left'){
                                    {* Do something here *}
                                }
                                if(action == 'right'){
                                    {* Do something here *}
                                }
                            }}
                        />

Did you find this article valuable?

Support Nitin Raturi by becoming a sponsor. Any amount is appreciated!