WordPress源代码——jquery-plugins(jquery.ui.touch-punch.js)

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);

联系我们
文章看不懂?联系我们为您免费解答!免费助力个人,小企站点!
电话:020-2206-9892
QQ咨询:1025174874
邮件:info@361sale.com
工作时间:周一至周五,9:30-18:30,节假日休息
发布者:光子波动,转转请注明出处:https://www.361sale.com/12533/

(0)
上一篇 2024年 7月 4日 上午10:47
下一篇 2024年 7月 4日 上午11:01

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

020-2206-9892

QQ咨询:1025174874

邮件:info@361sale.com

工作时间:周一至周五,9:30-18:30,节假日休息

客服微信
为方便全球用户注册登录,我们已取消电话登录功能。如遇登录问题,请联系客服协助绑定邮箱。