The source code

    /**
     * @ignore
     * gesture swipe inspired by sencha touch
     * @author yiminghe@gmail.com
     */
    KISSY.add('event/dom/touch/swipe', function (S, eventHandleMap, Event, SingleTouch) {

        var event = 'swipe';

        var MAX_DURATION = 1000,
            MAX_OFFSET = 35,
            MIN_DISTANCE = 50;

        function Swipe() {
        }

        S.extend(Swipe, SingleTouch, {

            onTouchStart: function (e) {
                var self = this;
                if (Swipe.superclass.onTouchStart.apply(self, arguments) === false) {
                    return false;
                }
                var touch = e.touches[0];
                self.startTime = e.timeStamp;

                self.isHorizontal = 1;
                self.isVertical = 1;

                self.startX = touch.pageX;
                this.startY = touch.pageY;

                if (e.type.indexOf('mouse') != -1) {
                    e.preventDefault();
                }
            },

            onTouchMove: function (e) {
                var self = this,
                    touch = e.changedTouches[0],
                    x = touch.pageX,
                    y = touch.pageY,
                    absDeltaX = Math.abs(x - self.startX),
                    absDeltaY = Math.abs(y - self.startY),
                    time = e.timeStamp;

                if (time - self.startTime > MAX_DURATION) {
                    return false;
                }

                if (self.isVertical && absDeltaX > MAX_OFFSET) {
                    self.isVertical = 0;
                }

                if (self.isHorizontal && absDeltaY > MAX_OFFSET) {
                    self.isHorizontal = 0;
                }

                if (!self.isHorizontal && !self.isVertical) {
                    return false;
                }
            },

            onTouchEnd: function (e) {
                var self = this;
                if (self.onTouchMove(e) === false) {
                    return false;
                }

                var touches = e.changedTouches,
                    touch = touches[0],
                    x = touch.pageX,
                    y = touch.pageY,
                    deltaX = x - self.startX,
                    deltaY = y - self.startY,
                    absDeltaX = Math.abs(deltaX),
                    absDeltaY = Math.abs(deltaY),
                    distance,
                    direction;

                if (self.isVertical && absDeltaY < MIN_DISTANCE) {
                    self.isVertical = 0;
                }

                if (self.isHorizontal && absDeltaX < MIN_DISTANCE) {
                    self.isHorizontal = 0;
                }

                if (self.isHorizontal) {
                    direction = deltaX < 0 ? 'left' : 'right';
                    distance = absDeltaX;
                } else if (self.isVertical) {
                    direction = deltaY < 0 ? 'up' : 'down';
                    distance = absDeltaY;
                } else {
                    return false;
                }

                Event.fire(e.target, event, {
                    /**
                     *
                     * native touch property **only for touch event**.
                     *
                     * @property touch
                     * @member KISSY.Event.DOMEventObject
                     */
                    touch: touch,
                    /**
                     *
                     * direction property **only for event swipe/singleTap/doubleTap**.
                     *
                     * can be one of 'up' 'down' 'left' 'right'
                     * @property {String} direction
                     * @member KISSY.Event.DOMEventObject
                     */
                    direction: direction,
                    /**
                     *
                     * distance property **only for event swipe**.
                     *
                     * the distance swipe gesture costs
                     * @property {Number} distance
                     * @member KISSY.Event.DOMEventObject
                     */
                    distance: distance,
                    /**
                     *
                     * duration property **only for touch event**.
                     *
                     * the duration swipe gesture costs
                     * @property {Number} duration
                     * @member KISSY.Event.DOMEventObject
                     */
                    duration: (e.timeStamp - self.startTime)/1000
                });
            }

        });

        eventHandleMap[event] = new Swipe();

        return Swipe;

    }, {
        requires: ['./handle-map', 'event/dom/base', './single-touch']
    });