mui.gestures.pinch.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /**
  2. * mui gesture pinch
  3. * @param {type} $
  4. * @param {type} name
  5. * @returns {undefined}
  6. */
  7. (function($, name) {
  8. var handle = function(event, touch) {
  9. var options = this.options;
  10. var session = $.gestures.session;
  11. switch (event.type) {
  12. case $.EVENT_START:
  13. break;
  14. case $.EVENT_MOVE:
  15. if ($.options.gestureConfig.pinch) {
  16. if (touch.touches.length < 2) {
  17. return;
  18. }
  19. if (!session.pinch) { //start
  20. session.pinch = true;
  21. $.trigger(session.target, name + 'start', touch);
  22. }
  23. $.trigger(session.target, name, touch);
  24. var scale = touch.scale;
  25. var rotation = touch.rotation;
  26. var lastScale = typeof touch.lastScale === 'undefined' ? 1 : touch.lastScale;
  27. var scaleDiff = 0.000000000001; //防止scale与lastScale相等,不触发事件的情况。
  28. if (scale > lastScale) { //out
  29. lastScale = scale - scaleDiff;
  30. $.trigger(session.target, name + 'out', touch);
  31. } //in
  32. else if (scale < lastScale) {
  33. lastScale = scale + scaleDiff;
  34. $.trigger(session.target, name + 'in', touch);
  35. }
  36. if (Math.abs(rotation) > options.minRotationAngle) {
  37. $.trigger(session.target, 'rotate', touch);
  38. }
  39. }
  40. break;
  41. case $.EVENT_END:
  42. case $.EVENT_CANCEL:
  43. if ($.options.gestureConfig.pinch && session.pinch && touch.touches.length === 2) {
  44. session.pinch = false;
  45. $.trigger(session.target, name + 'end', touch);
  46. }
  47. break;
  48. }
  49. };
  50. /**
  51. * mui gesture pinch
  52. */
  53. $.addGesture({
  54. name: name,
  55. index: 10,
  56. handle: handle,
  57. options: {
  58. minRotationAngle: 0
  59. }
  60. });
  61. })(mui, 'pinch');