Exemplo n.º 1
0
KISSY.add("event/gesture/touch/rotate", ["event/gesture/base", "event/dom/base", "./double-touch"], function(S, require) {
  var addGestureEvent = require("event/gesture/base").addEvent;
  var DomEvent = require("event/dom/base");
  var DoubleTouch = require("./double-touch");
  var ROTATE_START = "rotateStart", ROTATE = "rotate", RAD_2_DEG = 180 / Math.PI, ROTATE_END = "rotateEnd";
  function Rotate() {
  }
  S.extend(Rotate, DoubleTouch, {requiredGestureType:"touch", move:function(e) {
    var self = this;
    Rotate.superclass.move.apply(self, arguments);
    var touches = self.lastTouches, one = touches[0], two = touches[1], lastAngle = self.lastAngle, angle = Math.atan2(two.pageY - one.pageY, two.pageX - one.pageX) * RAD_2_DEG;
    if(lastAngle !== undefined) {
      var diff = Math.abs(angle - lastAngle);
      var positiveAngle = (angle + 360) % 360;
      var negativeAngle = (angle - 360) % 360;
      if(Math.abs(positiveAngle - lastAngle) < diff) {
        angle = positiveAngle
      }else {
        if(Math.abs(negativeAngle - lastAngle) < diff) {
          angle = negativeAngle
        }
      }
    }
    self.lastAngle = angle;
    if(!self.isStarted) {
      self.isStarted = true;
      self.startAngle = angle;
      self.target = self.getCommonTarget(e);
      DomEvent.fire(self.target, ROTATE_START, S.mix(e, {angle:angle, rotation:0}))
    }else {
      DomEvent.fire(self.target, ROTATE, S.mix(e, {angle:angle, rotation:angle - self.startAngle}))
    }
  }, end:function(e) {
    var self = this;
    Rotate.superclass.end.apply(self, arguments);
    self.lastAngle = undefined;
    DomEvent.fire(self.target, ROTATE_END, S.mix(e, {touches:self.lastTouches}))
  }});
  function prevent(e) {
    if(e.targetTouches.length === 2) {
      e.preventDefault()
    }
  }
  var r = new Rotate;
  addGestureEvent([ROTATE_END, ROTATE_START], {handle:r});
  var config = {handle:r};
  if(S.Feature.isTouchEventSupported()) {
    config.setup = function() {
      this.addEventListener("touchmove", prevent, false)
    };
    config.tearDown = function() {
      this.removeEventListener("touchmove", prevent, false)
    }
  }
  addGestureEvent(ROTATE, config);
  return{ROTATE_START:ROTATE_START, ROTATE:ROTATE, ROTATE_END:ROTATE_END}
});
Exemplo n.º 2
0
KISSY.add("event/gesture/touch/pinch", ["event/gesture/base", "event/dom/base", "./double-touch"], function(S, require) {
  var addGestureEvent = require("event/gesture/base").addEvent;
  var DomEvent = require("event/dom/base");
  var DoubleTouch = require("./double-touch");
  var PINCH = "pinch", PINCH_START = "pinchStart", PINCH_END = "pinchEnd";
  function getDistance(p1, p2) {
    var deltaX = p1.pageX - p2.pageX, deltaY = p1.pageY - p2.pageY;
    return Math.sqrt(deltaX * deltaX + deltaY * deltaY)
  }
  function Pinch() {
  }
  S.extend(Pinch, DoubleTouch, {requiredGestureType:"touch", move:function(e) {
    var self = this;
    Pinch.superclass.move.apply(self, arguments);
    var touches = self.lastTouches;
    if(!(touches[0].pageX > 0 && touches[0].pageY > 0 && touches[1].pageX > 0 && touches[1].pageY > 0)) {
      return
    }
    var distance = getDistance(touches[0], touches[1]);
    if(!self.isStarted) {
      self.isStarted = true;
      self.startDistance = distance;
      var target = self.target = self.getCommonTarget(e);
      DomEvent.fire(target, PINCH_START, S.mix(e, {distance:distance, scale:1}))
    }else {
      DomEvent.fire(self.target, PINCH, S.mix(e, {distance:distance, scale:distance / self.startDistance}))
    }
  }, end:function(e) {
    var self = this;
    Pinch.superclass.end.apply(self, arguments);
    DomEvent.fire(self.target, PINCH_END, S.mix(e, {touches:self.lastTouches}))
  }});
  var p = new Pinch;
  addGestureEvent([PINCH_START, PINCH_END], {handle:p});
  function prevent(e) {
    if(e.targetTouches.length === 2) {
      e.preventDefault()
    }
  }
  var config = {handle:p};
  if(S.Feature.isTouchEventSupported()) {
    config.setup = function() {
      this.addEventListener("touchmove", prevent, false)
    };
    config.tearDown = function() {
      this.removeEventListener("touchmove", prevent, false)
    }
  }
  addGestureEvent(PINCH, config);
  return{PINCH:PINCH, PINCH_START:PINCH_START, PINCH_END:PINCH_END}
});
Exemplo n.º 3
0
KISSY.add(function(S, require) {
  _$jscoverage['/touch/rotate.js'].functionData[0]++;
  _$jscoverage['/touch/rotate.js'].lineData[7]++;
  var addGestureEvent = require('event/gesture/base').addEvent;
  _$jscoverage['/touch/rotate.js'].lineData[8]++;
  var DomEvent = require('event/dom/base');
  _$jscoverage['/touch/rotate.js'].lineData[9]++;
  var DoubleTouch = require('./double-touch');
  _$jscoverage['/touch/rotate.js'].lineData[10]++;
  var ROTATE_START = 'rotateStart', ROTATE = 'rotate', RAD_2_DEG = 180 / Math.PI, ROTATE_END = 'rotateEnd';
  _$jscoverage['/touch/rotate.js'].lineData[15]++;
  function Rotate() {
    _$jscoverage['/touch/rotate.js'].functionData[1]++;
  }
  _$jscoverage['/touch/rotate.js'].lineData[18]++;
  S.extend(Rotate, DoubleTouch, {
  requiredGestureType: 'touch', 
  move: function(e) {
  _$jscoverage['/touch/rotate.js'].functionData[2]++;
  _$jscoverage['/touch/rotate.js'].lineData[22]++;
  var self = this;
  _$jscoverage['/touch/rotate.js'].lineData[23]++;
  Rotate.superclass.move.apply(self, arguments);
  _$jscoverage['/touch/rotate.js'].lineData[24]++;
  var touches = self.lastTouches, one = touches[0], two = touches[1], lastAngle = self.lastAngle, angle = Math.atan2(two.pageY - one.pageY, two.pageX - one.pageX) * RAD_2_DEG;
  _$jscoverage['/touch/rotate.js'].lineData[31]++;
  if (visit15_31_1(lastAngle !== undefined)) {
    _$jscoverage['/touch/rotate.js'].lineData[35]++;
    var diff = Math.abs(angle - lastAngle);
    _$jscoverage['/touch/rotate.js'].lineData[36]++;
    var positiveAngle = (angle + 360) % 360;
    _$jscoverage['/touch/rotate.js'].lineData[37]++;
    var negativeAngle = (angle - 360) % 360;
    _$jscoverage['/touch/rotate.js'].lineData[40]++;
    if (visit16_40_1(Math.abs(positiveAngle - lastAngle) < diff)) {
      _$jscoverage['/touch/rotate.js'].lineData[41]++;
      angle = positiveAngle;
    } else {
      _$jscoverage['/touch/rotate.js'].lineData[44]++;
      if (visit17_44_1(Math.abs(negativeAngle - lastAngle) < diff)) {
        _$jscoverage['/touch/rotate.js'].lineData[45]++;
        angle = negativeAngle;
      }
    }
  }
  _$jscoverage['/touch/rotate.js'].lineData[49]++;
  self.lastAngle = angle;
  _$jscoverage['/touch/rotate.js'].lineData[51]++;
  if (visit18_51_1(!self.isStarted)) {
    _$jscoverage['/touch/rotate.js'].lineData[52]++;
    self.isStarted = true;
    _$jscoverage['/touch/rotate.js'].lineData[54]++;
    self.startAngle = angle;
    _$jscoverage['/touch/rotate.js'].lineData[56]++;
    self.target = self.getCommonTarget(e);
    _$jscoverage['/touch/rotate.js'].lineData[58]++;
    DomEvent.fire(self.target, ROTATE_START, S.mix(e, {
  angle: angle, 
  rotation: 0}));
  } else {
    _$jscoverage['/touch/rotate.js'].lineData[64]++;
    DomEvent.fire(self.target, ROTATE, S.mix(e, {
  angle: angle, 
  rotation: angle - self.startAngle}));
  }
}, 
  end: function(e) {
  _$jscoverage['/touch/rotate.js'].functionData[3]++;
  _$jscoverage['/touch/rotate.js'].lineData[72]++;
  var self = this;
  _$jscoverage['/touch/rotate.js'].lineData[73]++;
  Rotate.superclass.end.apply(self, arguments);
  _$jscoverage['/touch/rotate.js'].lineData[74]++;
  self.lastAngle = undefined;
  _$jscoverage['/touch/rotate.js'].lineData[75]++;
  DomEvent.fire(self.target, ROTATE_END, S.mix(e, {
  touches: self.lastTouches}));
}});
  _$jscoverage['/touch/rotate.js'].lineData[81]++;
  function prevent(e) {
    _$jscoverage['/touch/rotate.js'].functionData[4]++;
    _$jscoverage['/touch/rotate.js'].lineData[84]++;
    if (visit19_84_1(e.targetTouches.length === 2)) {
      _$jscoverage['/touch/rotate.js'].lineData[85]++;
      e.preventDefault();
    }
  }
  _$jscoverage['/touch/rotate.js'].lineData[89]++;
  var r = new Rotate();
  _$jscoverage['/touch/rotate.js'].lineData[91]++;
  addGestureEvent([ROTATE_END, ROTATE_START], {
  handle: r});
  _$jscoverage['/touch/rotate.js'].lineData[95]++;
  var config = {
  handle: r};
  _$jscoverage['/touch/rotate.js'].lineData[98]++;
  if (visit20_98_1(S.Feature.isTouchEventSupported())) {
    _$jscoverage['/touch/rotate.js'].lineData[99]++;
    config.setup = function() {
  _$jscoverage['/touch/rotate.js'].functionData[5]++;
  _$jscoverage['/touch/rotate.js'].lineData[100]++;
  this.addEventListener('touchmove', prevent, false);
};
    _$jscoverage['/touch/rotate.js'].lineData[102]++;
    config.tearDown = function() {
  _$jscoverage['/touch/rotate.js'].functionData[6]++;
  _$jscoverage['/touch/rotate.js'].lineData[103]++;
  this.removeEventListener('touchmove', prevent, false);
};
  }
  _$jscoverage['/touch/rotate.js'].lineData[107]++;
  addGestureEvent(ROTATE, config);
  _$jscoverage['/touch/rotate.js'].lineData[109]++;
  return {
  ROTATE_START: ROTATE_START, 
  ROTATE: ROTATE, 
  ROTATE_END: ROTATE_END};
});
Exemplo n.º 4
0
KISSY.add("event/gesture/touch/swipe", ["event/gesture/base", "event/dom/base"], function(S, require) {
  var GestureBase = require("event/gesture/base");
  var addGestureEvent = GestureBase.addEvent;
  var DomEvent = require("event/dom/base");
  var SingleTouch = GestureBase.SingleTouch;
  var SWIPE = "swipe", SWIPING = "swiping", MAX_DURATION = 1E3, MAX_OFFSET = 35, MIN_DISTANCE = 50;
  function fire(self, e, ing) {
    var touches = self.lastTouches, 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(ing) {
      if(self.isVertical && self.isHorizontal) {
        if(Math.max(absDeltaX, absDeltaY) < 5) {
          return undefined
        }
        if(absDeltaY > absDeltaX) {
          self.isHorizontal = 0
        }else {
          self.isVertical = 0
        }
      }
    }else {
      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
      }
    }
    DomEvent.fire(touch.target, ing ? SWIPING : SWIPE, {originalEvent:e.originalEvent, pageX:touch.pageX, pageY:touch.pageY, which:1, touch:touch, direction:direction, distance:distance, duration:(e.timeStamp - self.startTime) / 1E3});
    return undefined
  }
  function Swipe() {
  }
  S.extend(Swipe, SingleTouch, {requiredGestureType:"touch", start:function() {
    var self = this;
    Swipe.superclass.start.apply(self, arguments);
    self.isStarted = true;
    var touch = self.lastTouches[0];
    self.isHorizontal = 1;
    self.isVertical = 1;
    self.startX = touch.pageX;
    self.startY = touch.pageY
  }, move:function(e) {
    var self = this, time = e.timeStamp;
    Swipe.superclass.move.apply(self, arguments);
    if(time - self.startTime > MAX_DURATION) {
      return false
    }
    var touch = self.lastTouches[0], x = touch.pageX, y = touch.pageY, deltaX = x - self.startX, deltaY = y - self.startY, absDeltaX = Math.abs(deltaX), absDeltaY = Math.abs(deltaY);
    if(self.isVertical && absDeltaX > MAX_OFFSET) {
      self.isVertical = 0
    }
    if(self.isHorizontal && absDeltaY > MAX_OFFSET) {
      self.isHorizontal = 0
    }
    return fire(self, e, 1)
  }, end:function(e) {
    var self = this;
    if(self.move(e) === false) {
      return false
    }
    return fire(self, e, 0)
  }});
  addGestureEvent([SWIPE, SWIPING], {handle:new Swipe});
  return{SWIPE:SWIPE, SWIPING:SWIPING}
});
Exemplo n.º 5
0
Arquivo: rotate.js Projeto: c2ye/kissy
KISSY.add(function (S, require) {
    var addGestureEvent = require('event/gesture/base').addEvent;
    var DomEvent = require('event/dom/base');
    var DoubleTouch = require('./double-touch');
    var ROTATE_START = 'rotateStart',
        ROTATE = 'rotate',
        RAD_2_DEG = 180 / Math.PI,
        ROTATE_END = 'rotateEnd';

    function Rotate() {
    }

    S.extend(Rotate, DoubleTouch, {
        requiredGestureType: 'touch',

        move: function (e) {
            var self = this;
            Rotate.superclass.move.apply(self, arguments);
            var touches = self.lastTouches,
                one = touches[0],
                two = touches[1],
                lastAngle = self.lastAngle,
                angle = Math.atan2(two.pageY - one.pageY,
                    two.pageX - one.pageX) * RAD_2_DEG;

            if (lastAngle !== undefined) {
                // more smooth
                // 5 4 3 2 1 -1 -2 -3 -4
                // 170 180 190 200
                var diff = Math.abs(angle - lastAngle);
                var positiveAngle = (angle + 360) % 360;
                var negativeAngle = (angle - 360) % 360;

                // process '>' scenario: top -> bottom
                if (Math.abs(positiveAngle - lastAngle) < diff) {
                    angle = positiveAngle;
                } else if (Math.abs(negativeAngle - lastAngle) < diff) {
                    // process '>' scenario: bottom -> top
                    angle = negativeAngle;
                }
            }

            self.lastAngle = angle;

            if (!self.isStarted) {
                self.isStarted = true;

                self.startAngle = angle;

                self.target = self.getCommonTarget(e);

                DomEvent.fire(self.target, ROTATE_START, S.mix(e, {
                    angle: angle,
                    rotation: 0
                }));
            } else {
                DomEvent.fire(self.target, ROTATE, S.mix(e, {
                    angle: angle,
                    rotation: angle - self.startAngle
                }));
            }
        },

        end: function (e) {
            var self = this;
            Rotate.superclass.end.apply(self, arguments);
            self.lastAngle = undefined;
            DomEvent.fire(self.target, ROTATE_END, S.mix(e, {
                touches: self.lastTouches
            }));
        }
    });

    function prevent(e) {
        // android can not throttle
        // need preventDefault always
        if (e.targetTouches.length === 2) {
            e.preventDefault();
        }
    }

    var r = new Rotate();

    addGestureEvent([ROTATE_END, ROTATE_START], {
        handle: r
    });

    var config = {
        handle: r
    };
    if (S.Feature.isTouchEventSupported()) {
        config.setup = function () {
            this.addEventListener('touchmove', prevent, false);
        };
        config.tearDown = function () {
            this.removeEventListener('touchmove', prevent, false);
        };
    }

    addGestureEvent(ROTATE, config);

    return {
        ROTATE_START: ROTATE_START,
        ROTATE: ROTATE,
        ROTATE_END: ROTATE_END
    };
});