/**
* @ignore
* gesture pinch
* @author yiminghe@gmail.com
*/
KISSY.add('event/dom/touch/pinch', function (S, eventHandleMap, Event, MultiTouch) {
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, MultiTouch, {
onTouchMove: function (e) {
var self = this;
if (!self.isTracking) {
return;
}
var touches = e.touches,
distance = getDistance(touches[0], touches[1]);
self.lastTouches = touches;
if (!self.isStarted) {
self.isStarted = true;
self.startDistance = distance;
var target = self.target = self.getCommonTarget(e);
Event.fire(target,
PINCH_START, {
touches: touches,
distance: distance,
scale: 1
});
} else {
Event.fire(self.target,
PINCH, {
touches: touches,
distance: distance,
scale: distance / self.startDistance
});
}
},
fireEnd: function () {
var self = this;
Event.fire(self.target, PINCH_END, {
touches: self.lastTouches
});
}
});
eventHandleMap[PINCH] =
eventHandleMap[PINCH_END] =
eventHandleMap[PINCH_END] = new Pinch();
return Pinch;
}, {
requires: ['./handle-map', 'event/dom/base', './multi-touch']
});