ker/mod/tfw.gestures.js
function onDrag( register, slot, args ) {
    const that = this;

    register( 'hammer.pan', function ( evt ) {
        if ( evt.isFinal ) return false;
        setHammerXY( that.$, evt );
        if ( typeof that._dragX === 'undefined' ) {
            that._dragX = evt.x;
            that._dragY = evt.y;
            that._dragStart = true;
        }
        setHammerVxVy.call( that, that.$, evt );
        const domEvt = evt.srcEvent;
        slot( {
            x: evt.x,
            y: evt.y,
            x0: evt.x0,
            y0: evt.y0,
            vx: evt.vx,
            vy: evt.vy,
            sx: evt.velocityX,
            sy: evt.velocityY,
            event: evt,
            target: evt.target,
            buttons: getButtons( evt ),
            preventDefault: domEvt.preventDefault.bind( domEvt ),
            stopPropagation: domEvt.stopImmediatePropagation.bind( domEvt )
        }, args );
        return true;
    } );
}
function onDrag( register, slot, args ) {
    const that = this;

    register( 'hammer.pan', function ( evt ) {
        if ( evt.isFinal ) return false;
        setHammerXY( that.$, evt );
        if ( typeof that._dragX === 'undefined' ) {
            that._dragX = evt.x;
            that._dragY = evt.y;
            that._dragStart = true;
        }
        setHammerVxVy.call( that, that.$, evt );
        const domEvt = evt.srcEvent;
        slot( {
            x: evt.x,
            y: evt.y,
            x0: evt.x0,
            y0: evt.y0,
            vx: evt.vx,
            vy: evt.vy,
            sx: evt.velocityX,
            sy: evt.velocityY,
            event: evt,
            target: evt.target,
            buttons: getButtons( evt ),
            preventDefault: domEvt.preventDefault.bind( domEvt ),
            stopPropagation: domEvt.stopImmediatePropagation.bind( domEvt )
        }, args );
        return true;
    } );
}
function onDrag ( register , slot , args ) { const that = this ; register ( 'hammer.pan' , function ( evt ) { if ( evt . isFinal ) return false ; setHammerXY ( that . $ , evt ) ; if ( typeof that . _dragX === 'undefined' ) { that . _dragX = evt . x ; that . _dragY = evt . y ; that . _dragStart = true ; } setHammerVxVy . call ( that , that . $ , evt ) ; const domEvt = evt . srcEvent ; slot ( { x : evt . x , y : evt . y , x0 : evt . x0 , y0 : evt . y0 , vx : evt . vx , vy : evt . vy , sx : evt . velocityX , sy : evt . velocityY , event : evt , target : evt . target , buttons : getButtons ( evt ) , preventDefault : domEvt . preventDefault . bind ( domEvt ) , stopPropagation : domEvt . stopImmediatePropagation . bind ( domEvt ) } , args ) ; return true ; } ) ; }
Dragging is moving while touching.

@this Gesture
@param   {function} register - Hammer register function.
@param   {function} slot - Function to call when the event occurs.
@param   {any} args - Any argument to send to the slot.
@returns {undefined}
Dragging is moving while touching .