@@ -43,7 +43,7 @@ window.util.toucher = window.util.toucher || function (dom){
43
43
className = null ;
44
44
fn = a ;
45
45
}
46
- //事件名存在且callback合法,进行监听
46
+ //事件名存在且callback合法,进行监听绑定
47
47
if ( eventName . length > 0 && typeof ( fn ) == 'function' ) {
48
48
//事件堆无该事件,创建一个事件堆
49
49
if ( ! this . _events [ eventName ] ) {
@@ -68,14 +68,15 @@ window.util.toucher = window.util.toucher || function (dom){
68
68
*/
69
69
function EMIT ( eventName , e ) {
70
70
this . _events = this . _events || { } ;
71
- //事件堆无该事件,结束运行
71
+ //事件堆无该事件,结束触发
72
72
if ( ! this . _events [ eventName ] ) {
73
73
return
74
74
}
75
- //尚未被执行掉的事件绑定
75
+ //记录尚未被执行掉的事件绑定
76
76
var rest_events = this . _events [ eventName ] ;
77
+
78
+ //从事件源:target开始向上冒泡
77
79
var target = e . target ;
78
- //从target开始向上冒泡
79
80
while ( 1 ) {
80
81
//当前需要校验的事件集
81
82
var eventsList = rest_events ;
@@ -93,7 +94,7 @@ window.util.toucher = window.util.toucher || function (dom){
93
94
return
94
95
}
95
96
} else {
96
- //不符合执行条件,压回到尚未执行掉的列表中
97
+ //不符合执行条件,压回到尚未执行掉的列表中
97
98
rest_events . push ( eventsList [ i ] ) ;
98
99
}
99
100
}
@@ -121,18 +122,26 @@ window.util.toucher = window.util.toucher || function (dom){
121
122
122
123
/**
123
124
* 执行绑定的回调函数,并创建一个事件对象
125
+ * @param [string]事件名
126
+ * @param [function]被执行掉的函数
127
+ * @param [object]指向的dom
128
+ * @param [object]原生event对象
124
129
*/
125
130
function event_callback ( name , fn , dom , e ) {
126
131
var touch = e . touches . length ? e . touches [ 0 ] : { } ;
127
132
128
133
var newE = {
129
134
'type' : name ,
130
135
'pageX' : touch . clientX || 0 ,
131
- 'pageY' : touch . clientY || 0 ,
132
- 'screenX' : touch . screenX || 0 ,
133
- 'screenY' : touch . screenY || 0
136
+ 'pageY' : touch . clientY || 0
134
137
} ;
135
-
138
+ //为swipe事件增加交互初始位置及移动距离
139
+ if ( name == 'swipe' && e . startPosition ) {
140
+ newE . startX = e . startPosition [ 'pageX' ] ,
141
+ newE . startY = e . startPosition [ 'pageY' ] ,
142
+ newE . moveX = newE . pageX - newE . startX ,
143
+ newE . moveY = newE . pageY - newE . startY
144
+ }
136
145
return fn . call ( dom , newE ) ;
137
146
}
138
147
/**
@@ -170,7 +179,8 @@ window.util.toucher = window.util.toucher || function (dom){
170
179
clearTimeout ( longTap ) ;
171
180
clearTimeout ( touchDelay ) ;
172
181
}
173
-
182
+
183
+ //触屏开始
174
184
function touchStart ( e ) {
175
185
//缓存事件
176
186
eventMark = e ;
@@ -190,6 +200,7 @@ window.util.toucher = window.util.toucher || function (dom){
190
200
EMIT . call ( this_touch , 'longTap' , e ) ;
191
201
} , 500 ) ;
192
202
}
203
+ //触屏结束
193
204
function touchend ( e ) {
194
205
//touchend中,拿不到坐标位置信息,故使用全局保存下的事件
195
206
EMIT . call ( this_touch , 'swipeEnd' , eventMark ) ;
@@ -211,11 +222,16 @@ window.util.toucher = window.util.toucher || function (dom){
211
222
}
212
223
lastTouchTime = now ;
213
224
}
214
-
225
+
226
+ //手指移动
215
227
function touchmove ( e ) {
216
228
//缓存事件
217
229
eventMark = e ;
218
-
230
+ //在原生事件基础上记录初始位置(为swipe事件增加参数传递)
231
+ e . startPosition = {
232
+ 'pageX' : x1 ,
233
+ 'pageY' : y1
234
+ } ;
219
235
//断定此次事件为移动事件
220
236
EMIT . call ( this_touch , 'swipe' , e ) ;
221
237
@@ -269,8 +285,7 @@ window.util.toucher = window.util.toucher || function (dom){
269
285
DOM . addEventListener ( 'MSPointerCancel' , actionOver ) ;
270
286
DOM . addEventListener ( 'pointercancel' , actionOver ) ;
271
287
}
272
-
273
-
288
+
274
289
/**
275
290
* touch类
276
291
*
@@ -285,6 +300,8 @@ window.util.toucher = window.util.toucher || function (dom){
285
300
}
286
301
//拓展事件绑定方法
287
302
touch . prototype [ 'on' ] = ON ;
303
+
304
+
288
305
//对外提供接口
289
306
exports . init = touch ;
290
307
} ) ( util . toucher ) ;
0 commit comments