source: pro-violet-viettel/docs/Space-update-logo/Space/assets/js/uncompressed/jquery.ui.touch-punch.js @ 316

Last change on this file since 316 was 316, checked in by dungnv, 11 years ago
  • Property svn:mime-type set to text/plain
File size: 4.5 KB
Line 
1/*!
2 * jQuery UI Touch Punch 0.2.2
3 *
4 * Copyright 2011, Dave Furfero
5 * Dual licensed under the MIT or GPL Version 2 licenses.
6 *
7 * Depends:
8 *  jquery.ui.widget.js
9 *  jquery.ui.mouse.js
10 */
11(function ($) {
12
13  // Detect touch support
14  $.support.touch = 'ontouchend' in document;
15
16  // Ignore browsers without touch support
17  if (!$.support.touch) {
18    return;
19  }
20
21  var mouseProto = $.ui.mouse.prototype,
22      _mouseInit = mouseProto._mouseInit,
23      touchHandled;
24
25  /**
26   * Simulate a mouse event based on a corresponding touch event
27   * @param {Object} event A touch event
28   * @param {String} simulatedType The corresponding mouse event
29   */
30  function simulateMouseEvent (event, simulatedType) {
31
32    // Ignore multi-touch events
33    if (event.originalEvent.touches.length > 1) {
34      return;
35    }
36
37    event.preventDefault();
38
39    var touch = event.originalEvent.changedTouches[0],
40        simulatedEvent = document.createEvent('MouseEvents');
41   
42    // Initialize the simulated mouse event using the touch event's coordinates
43    simulatedEvent.initMouseEvent(
44      simulatedType,    // type
45      true,             // bubbles                   
46      true,             // cancelable                 
47      window,           // view                       
48      1,                // detail                     
49      touch.screenX,    // screenX                   
50      touch.screenY,    // screenY                   
51      touch.clientX,    // clientX                   
52      touch.clientY,    // clientY                   
53      false,            // ctrlKey                   
54      false,            // altKey                     
55      false,            // shiftKey                   
56      false,            // metaKey                   
57      0,                // button                     
58      null              // relatedTarget             
59    );
60
61    // Dispatch the simulated event to the target element
62    event.target.dispatchEvent(simulatedEvent);
63  }
64
65  /**
66   * Handle the jQuery UI widget's touchstart events
67   * @param {Object} event The widget element's touchstart event
68   */
69  mouseProto._touchStart = function (event) {
70
71    var self = this;
72
73    // Ignore the event if another widget is already being handled
74    if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) {
75      return;
76    }
77
78    // Set the flag to prevent other widgets from inheriting the touch event
79    touchHandled = true;
80
81    // Track movement to determine if interaction was a click
82    self._touchMoved = false;
83
84    // Simulate the mouseover event
85    simulateMouseEvent(event, 'mouseover');
86
87    // Simulate the mousemove event
88    simulateMouseEvent(event, 'mousemove');
89
90    // Simulate the mousedown event
91    simulateMouseEvent(event, 'mousedown');
92  };
93
94  /**
95   * Handle the jQuery UI widget's touchmove events
96   * @param {Object} event The document's touchmove event
97   */
98  mouseProto._touchMove = function (event) {
99
100    // Ignore event if not handled
101    if (!touchHandled) {
102      return;
103    }
104
105    // Interaction was not a click
106    this._touchMoved = true;
107
108    // Simulate the mousemove event
109    simulateMouseEvent(event, 'mousemove');
110  };
111
112  /**
113   * Handle the jQuery UI widget's touchend events
114   * @param {Object} event The document's touchend event
115   */
116  mouseProto._touchEnd = function (event) {
117
118    // Ignore event if not handled
119    if (!touchHandled) {
120      return;
121    }
122
123    // Simulate the mouseup event
124    simulateMouseEvent(event, 'mouseup');
125
126    // Simulate the mouseout event
127    simulateMouseEvent(event, 'mouseout');
128
129    // If the touch interaction did not move, it should trigger a click
130    if (!this._touchMoved) {
131
132      // Simulate the click event
133      simulateMouseEvent(event, 'click');
134    }
135
136    // Unset the flag to allow other widgets to inherit the touch event
137    touchHandled = false;
138  };
139
140  /**
141   * A duck punch of the $.ui.mouse _mouseInit method to support touch events.
142   * This method extends the widget with bound touch event handlers that
143   * translate touch events to mouse events and pass them to the widget's
144   * original mouse event handling methods.
145   */
146  mouseProto._mouseInit = function () {
147   
148    var self = this;
149
150    // Delegate the touch handlers to the widget's element
151    self.element
152      .bind('touchstart', $.proxy(self, '_touchStart'))
153      .bind('touchmove', $.proxy(self, '_touchMove'))
154      .bind('touchend', $.proxy(self, '_touchEnd'));
155
156    // Call the original $.ui.mouse init method
157    _mouseInit.call(self);
158  };
159
160})(jQuery);
Note: See TracBrowser for help on using the repository browser.