annotate io2012slides/js/hammer.js @ 0:dd1c78c6398f

add having slides
author taiki <taiki@cr.ie.u-ryukyu.ac.jp>
date Mon, 25 Mar 2013 05:14:03 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /*
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 * Hammer.JS
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 * version 0.4
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 * author: Eight Media
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 * https://github.com/EightMedia/hammer.js
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 function Hammer(element, options, undefined)
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 var self = this;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 var defaults = {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 // prevent the default event or not... might be buggy when false
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 prevent_default : false,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 css_hacks : true,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 drag : true,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 drag_vertical : true,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 drag_horizontal : true,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 // minimum distance before the drag event starts
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 drag_min_distance : 20, // pixels
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 // pinch zoom and rotation
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 transform : true,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 scale_treshold : 0.1,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 rotation_treshold : 15, // degrees
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 tap : true,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 tap_double : true,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 tap_max_interval : 300,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 tap_double_distance: 20,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 hold : true,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 hold_timeout : 500
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 options = mergeObject(defaults, options);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 // some css hacks
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 (function() {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 if(!options.css_hacks) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 return false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 var vendors = ['webkit','moz','ms','o',''];
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 var css_props = {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 "userSelect": "none",
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 "touchCallout": "none",
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 "userDrag": "none",
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 "tapHighlightColor": "rgba(0,0,0,0)"
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 var prop = '';
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 for(var i = 0; i < vendors.length; i++) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 for(var p in css_props) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 prop = p;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 if(vendors[i]) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 prop = vendors[i] + prop.substring(0, 1).toUpperCase() + prop.substring(1);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 element.style[ prop ] = css_props[p];
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 })();
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 // holds the distance that has been moved
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 var _distance = 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 // holds the exact angle that has been moved
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 var _angle = 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 // holds the diraction that has been moved
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 var _direction = 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 // holds position movement for sliding
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 var _pos = { };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 // how many fingers are on the screen
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 var _fingers = 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 var _first = false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 var _gesture = null;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 var _prev_gesture = null;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 var _touch_start_time = null;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 var _prev_tap_pos = {x: 0, y: 0};
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 var _prev_tap_end_time = null;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 var _hold_timer = null;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 var _offset = {};
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 // keep track of the mouse status
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 var _mousedown = false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 var _event_start;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 var _event_move;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 var _event_end;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 /**
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 * angle to direction define
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 * @param float angle
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 * @return string direction
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 this.getDirectionFromAngle = function( angle )
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 var directions = {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 down: angle >= 45 && angle < 135, //90
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 left: angle >= 135 || angle <= -135, //180
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 up: angle < -45 && angle > -135, //270
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 right: angle >= -45 && angle <= 45 //0
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 var direction, key;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 for(key in directions){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 if(directions[key]){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 direction = key;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 break;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 return direction;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 /**
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 * count the number of fingers in the event
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 * when no fingers are detected, one finger is returned (mouse pointer)
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 * @param event
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 * @return int fingers
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 function countFingers( event )
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 // there is a bug on android (until v4?) that touches is always 1,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 // so no multitouch is supported, e.g. no, zoom and rotation...
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 return event.touches ? event.touches.length : 1;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 /**
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 * get the x and y positions from the event object
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 * @param event
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 * @return array [{ x: int, y: int }]
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 function getXYfromEvent( event )
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 event = event || window.event;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 // no touches, use the event pageX and pageY
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 if(!event.touches) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 var doc = document,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 body = doc.body;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 return [{
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 x: event.pageX || event.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && doc.clientLeft || 0 ),
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 y: event.pageY || event.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && doc.clientTop || 0 )
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 }];
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 // multitouch, return array with positions
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 else {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 var pos = [], src;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 for(var t=0, len=event.touches.length; t<len; t++) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 src = event.touches[t];
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 pos.push({ x: src.pageX, y: src.pageY });
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 return pos;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
167
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 /**
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 * calculate the angle between two points
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 * @param object pos1 { x: int, y: int }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 * @param object pos2 { x: int, y: int }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 function getAngle( pos1, pos2 )
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 return Math.atan2(pos2.y - pos1.y, pos2.x - pos1.x) * 180 / Math.PI;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
178
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
179 /**
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 * trigger an event/callback by name with params
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 * @param string name
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 * @param array params
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 function triggerEvent( eventName, params )
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 // return touches object
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 params.touches = getXYfromEvent(params.originalEvent);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 params.type = eventName;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 // trigger callback
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 if(isFunction(self["on"+ eventName])) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 self["on"+ eventName].call(self, params);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 /**
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 * cancel event
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 * @param object event
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 * @return void
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 function cancelEvent(event){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 event = event || window.event;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 if(event.preventDefault){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 event.preventDefault();
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 }else{
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 event.returnValue = false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 event.cancelBubble = true;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
212
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 /**
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 * reset the internal vars to the start values
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 function reset()
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 _pos = {};
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 _first = false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 _fingers = 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 _distance = 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 _angle = 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 _gesture = null;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 var gestures = {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 // hold gesture
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 // fired on touchstart
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 hold : function(event)
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 // only when one finger is on the screen
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 if(options.hold) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 _gesture = 'hold';
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 clearTimeout(_hold_timer);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 _hold_timer = setTimeout(function() {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 if(_gesture == 'hold') {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 triggerEvent("hold", {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 originalEvent : event,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 position : _pos.start
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 });
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 }, options.hold_timeout);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 },
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 // drag gesture
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 // fired on mousemove
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 drag : function(event)
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 // get the distance we moved
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 var _distance_x = _pos.move[0].x - _pos.start[0].x;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 var _distance_y = _pos.move[0].y - _pos.start[0].y;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 _distance = Math.sqrt(_distance_x * _distance_x + _distance_y * _distance_y);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 // drag
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 // minimal movement required
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 if(options.drag && (_distance > options.drag_min_distance) || _gesture == 'drag') {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 // calculate the angle
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 _angle = getAngle(_pos.start[0], _pos.move[0]);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 _direction = self.getDirectionFromAngle(_angle);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
265
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 // check the movement and stop if we go in the wrong direction
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 var is_vertical = (_direction == 'up' || _direction == 'down');
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 if(((is_vertical && !options.drag_vertical) || (!is_vertical && !options.drag_horizontal))
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 && (_distance > options.drag_min_distance)) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 return;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
272
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 _gesture = 'drag';
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
274
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 var position = { x: _pos.move[0].x - _offset.left,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 y: _pos.move[0].y - _offset.top };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
277
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 var event_obj = {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 originalEvent : event,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 position : position,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 direction : _direction,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 distance : _distance,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 distanceX : _distance_x,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 distanceY : _distance_y,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 angle : _angle
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
287
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 // on the first time trigger the start event
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 if(_first) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 triggerEvent("dragstart", event_obj);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
291
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 _first = false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
294
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 // normal slide event
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 triggerEvent("drag", event_obj);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
297
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 cancelEvent(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 },
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
301
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
302
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
303 // transform gesture
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 // fired on touchmove
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 transform : function(event)
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 if(options.transform) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
308 var scale = event.scale || 1;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 var rotation = event.rotation || 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
310
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 if(countFingers(event) != 2) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 return false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
314
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 if(_gesture != 'drag' &&
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 (_gesture == 'transform' || Math.abs(1-scale) > options.scale_treshold
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 || Math.abs(rotation) > options.rotation_treshold)) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 _gesture = 'transform';
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
319
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 _pos.center = { x: ((_pos.move[0].x + _pos.move[1].x) / 2) - _offset.left,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 y: ((_pos.move[0].y + _pos.move[1].y) / 2) - _offset.top };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
322
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 var event_obj = {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 originalEvent : event,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 position : _pos.center,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
326 scale : scale,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 rotation : rotation
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
329
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
330 // on the first time trigger the start event
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 if(_first) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 triggerEvent("transformstart", event_obj);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 _first = false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
335
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 triggerEvent("transform", event_obj);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
337
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
338 cancelEvent(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
339
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 return true;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
343
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
344 return false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
345 },
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
346
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
347
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
348 // tap and double tap gesture
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 // fired on touchend
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 tap : function(event)
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
352 // compare the kind of gesture by time
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
353 var now = new Date().getTime();
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
354 var touch_time = now - _touch_start_time;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
355
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
356 // dont fire when hold is fired
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 if(options.hold && !(options.hold && options.hold_timeout > touch_time)) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 return;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
359 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
360
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 // when previous event was tap and the tap was max_interval ms ago
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 var is_double_tap = (function(){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 if (_prev_tap_pos && options.tap_double && _prev_gesture == 'tap' && (_touch_start_time - _prev_tap_end_time) < options.tap_max_interval) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
364 var x_distance = Math.abs(_prev_tap_pos[0].x - _pos.start[0].x);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
365 var y_distance = Math.abs(_prev_tap_pos[0].y - _pos.start[0].y);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
366 return (_prev_tap_pos && _pos.start && Math.max(x_distance, y_distance) < options.tap_double_distance);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
367
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
369 return false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
370 })();
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
371
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
372 if(is_double_tap) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
373 _gesture = 'double_tap';
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 _prev_tap_end_time = null;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
375
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 triggerEvent("doubletap", {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 originalEvent : event,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 position : _pos.start
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 });
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 cancelEvent(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
382
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
383 // single tap is single touch
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 else {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 _gesture = 'tap';
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 _prev_tap_end_time = now;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 _prev_tap_pos = _pos.start;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
388
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
389 if(options.tap) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 triggerEvent("tap", {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
391 originalEvent : event,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 position : _pos.start
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 });
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 cancelEvent(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
397
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
399
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
401
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
402
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 function handleEvents(event)
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 switch(event.type)
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 case 'mousedown':
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 case 'touchstart':
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 _pos.start = getXYfromEvent(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 _touch_start_time = new Date().getTime();
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 _fingers = countFingers(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 _first = true;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 _event_start = event;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
414
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 // borrowed from jquery offset https://github.com/jquery/jquery/blob/master/src/offset.js
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 var box = element.getBoundingClientRect();
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 var clientTop = element.clientTop || document.body.clientTop || 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 var clientLeft = element.clientLeft || document.body.clientLeft || 0;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 var scrollTop = window.pageYOffset || element.scrollTop || document.body.scrollTop;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 var scrollLeft = window.pageXOffset || element.scrollLeft || document.body.scrollLeft;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
421
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 _offset = {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 top: box.top + scrollTop - clientTop,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 left: box.left + scrollLeft - clientLeft
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
426
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 _mousedown = true;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
428
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 // hold gesture
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 gestures.hold(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
431
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 if(options.prevent_default) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 cancelEvent(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 break;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
436
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 case 'mousemove':
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 case 'touchmove':
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 if(!_mousedown) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 return false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 _event_move = event;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 _pos.move = getXYfromEvent(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
444
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 if(!gestures.transform(event)) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 gestures.drag(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 break;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
449
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 case 'mouseup':
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 case 'mouseout':
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 case 'touchcancel':
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 case 'touchend':
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 if(!_mousedown || (_gesture != 'transform' && event.touches && event.touches.length > 0)) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 return false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
456 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
457
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 _mousedown = false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
459 _event_end = event;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
460
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
461 // drag gesture
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 // dragstart is triggered, so dragend is possible
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 if(_gesture == 'drag') {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 triggerEvent("dragend", {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
465 originalEvent : event,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 direction : _direction,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
467 distance : _distance,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
468 angle : _angle
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 });
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
471
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 // transform
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
473 // transformstart is triggered, so transformed is possible
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 else if(_gesture == 'transform') {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 triggerEvent("transformend", {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 originalEvent : event,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 position : _pos.center,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
478 scale : event.scale,
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 rotation : event.rotation
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
480 });
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
481 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 else {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 gestures.tap(_event_start);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
485
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 _prev_gesture = _gesture;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
487
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
488 // reset vars
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
489 reset();
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
490 break;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
491 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
493
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
494
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 // bind events for touch devices
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
496 // except for windows phone 7.5, it doesnt support touch events..!
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
497 if('ontouchstart' in window) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
498 element.addEventListener("touchstart", handleEvents, false);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
499 element.addEventListener("touchmove", handleEvents, false);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
500 element.addEventListener("touchend", handleEvents, false);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 element.addEventListener("touchcancel", handleEvents, false);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
502 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
503 // for non-touch
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
504 else {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
505
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
506 if(element.addEventListener){ // prevent old IE errors
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 element.addEventListener("mouseout", function(event) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
508 if(!isInsideHammer(element, event.relatedTarget)) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
509 handleEvents(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 }, false);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
512 element.addEventListener("mouseup", handleEvents, false);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
513 element.addEventListener("mousedown", handleEvents, false);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 element.addEventListener("mousemove", handleEvents, false);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
515
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
516 // events for older IE
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 }else if(document.attachEvent){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
518 element.attachEvent("onmouseout", function(event) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 if(!isInsideHammer(element, event.relatedTarget)) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 handleEvents(event);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 }, false);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 element.attachEvent("onmouseup", handleEvents);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
524 element.attachEvent("onmousedown", handleEvents);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 element.attachEvent("onmousemove", handleEvents);
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
526 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
527 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
528
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
529
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
530 /**
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
531 * find if element is (inside) given parent element
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
532 * @param object element
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
533 * @param object parent
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
534 * @return bool inside
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
535 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
536 function isInsideHammer(parent, child) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 // get related target for IE
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
538 if(!child && window.event && window.event.toElement){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 child = window.event.toElement;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
540 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
541
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
542 if(parent === child){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
543 return true;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
545
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
546 // loop over parentNodes of child until we find hammer element
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 if(child){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 var node = child.parentNode;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 while(node !== null){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 if(node === parent){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 return true;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 };
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 node = node.parentNode;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
554 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
555 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
556 return false;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
558
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
559
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
560 /**
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 * merge 2 objects into a new object
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 * @param object obj1
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 * @param object obj2
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 * @return object merged object
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
565 */
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
566 function mergeObject(obj1, obj2) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 var output = {};
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
568
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 if(!obj2) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
570 return obj1;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
571 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
572
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
573 for (var prop in obj1) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
574 if (prop in obj2) {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
575 output[prop] = obj2[prop];
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
576 } else {
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 output[prop] = obj1[prop];
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
578 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
579 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
580 return output;
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
581 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
582
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
583 function isFunction( obj ){
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
584 return Object.prototype.toString.call( obj ) == "[object Function]";
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
585 }
dd1c78c6398f add having slides
taiki <taiki@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
586 }