Skip to content

Commit 31cc90d

Browse files
author
Gabriel Schulhof
committed
Events: Separate out scroll and make transitions depend on scroll alone
Fixes jquery-archivegh-7805 Closes jquery-archivegh-7889
1 parent e9e3b56 commit 31cc90d

File tree

9 files changed

+106
-54
lines changed

9 files changed

+106
-54
lines changed

js/events.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
//>>label: Events
44
//>>group: Events
55

6-
define( [ "jquery", "./events/navigate", "./events/touch", "./events/orientationchange" ], function() {
6+
define( [
7+
"jquery",
8+
"./events/navigate",
9+
"./events/touch",
10+
"./events/scroll",
11+
"./events/orientationchange" ], function() {
712
});
813
//>>excludeEnd("jqmBuildExclude");

js/events/scroll.js

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
2+
//>>description: Scroll events including: scrollstart, scrollstop
3+
//>>label: Scroll
4+
//>>group: Events
5+
6+
define( [ "jquery" ], function( jQuery ) {
7+
//>>excludeEnd("jqmBuildExclude");
8+
9+
(function( $, window, undefined ) {
10+
var scrollEvent = "touchmove scroll";
11+
12+
// setup new event shortcuts
13+
$.each( [ "scrollstart", "scrollstop" ], function( i, name ) {
14+
15+
$.fn[ name ] = function( fn ) {
16+
return fn ? this.bind( name, fn ) : this.trigger( name );
17+
};
18+
19+
// jQuery < 1.8
20+
if ( $.attrFn ) {
21+
$.attrFn[ name ] = true;
22+
}
23+
});
24+
25+
// also handles scrollstop
26+
$.event.special.scrollstart = {
27+
28+
enabled: true,
29+
setup: function() {
30+
31+
var thisObject = this,
32+
$this = $( thisObject ),
33+
scrolling,
34+
timer;
35+
36+
function trigger( event, state ) {
37+
var originalEventType = event.type;
38+
39+
scrolling = state;
40+
41+
event.type = scrolling ? "scrollstart" : "scrollstop";
42+
$.event.dispatch.call( thisObject, event );
43+
event.type = originalEventType;
44+
}
45+
46+
// iPhone triggers scroll after a small delay; use touchmove instead
47+
$this.bind( scrollEvent, function( event ) {
48+
49+
if ( !$.event.special.scrollstart.enabled ) {
50+
return;
51+
}
52+
53+
if ( !scrolling ) {
54+
trigger( event, true );
55+
}
56+
57+
clearTimeout( timer );
58+
timer = setTimeout( function() {
59+
trigger( event, false );
60+
}, 50 );
61+
});
62+
},
63+
teardown: function() {
64+
$( this ).unbind( scrollEvent );
65+
}
66+
};
67+
68+
$.each({
69+
scrollstop: "scrollstart"
70+
}, function( event, sourceEvent ) {
71+
72+
$.event.special[ event ] = {
73+
setup: function() {
74+
$( this ).bind( sourceEvent, $.noop );
75+
},
76+
teardown: function() {
77+
$( this ).unbind( sourceEvent );
78+
}
79+
};
80+
});
81+
82+
})( jQuery, this );
83+
//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
84+
});
85+
//>>excludeEnd("jqmBuildExclude");

js/events/touch.js

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
2-
//>>description: Touch events including: touchstart, touchmove, touchend, tap, taphold, swipe, swipeleft, swiperight, scrollstart, scrollstop
2+
//>>description: Touch events including: touchstart, touchmove, touchend, tap, taphold, swipe, swipeleft, swiperight
33
//>>label: Touch
44
//>>group: Events
55

@@ -9,16 +9,14 @@ define( [ "jquery", "../vmouse", "../support/touch" ], function( jQuery ) {
99
(function( $, window, undefined ) {
1010
var $document = $( document ),
1111
supportTouch = $.mobile.support.touch,
12-
scrollEvent = "touchmove scroll",
1312
touchStartEvent = supportTouch ? "touchstart" : "mousedown",
1413
touchStopEvent = supportTouch ? "touchend" : "mouseup",
1514
touchMoveEvent = supportTouch ? "touchmove" : "mousemove";
1615

1716
// setup new event shortcuts
1817
$.each( ( "touchstart touchmove touchend " +
1918
"tap taphold " +
20-
"swipe swipeleft swiperight " +
21-
"scrollstart scrollstop" ).split( " " ), function( i, name ) {
19+
"swipe swipeleft swiperight" ).split( " " ), function( i, name ) {
2220

2321
$.fn[ name ] = function( fn ) {
2422
return fn ? this.bind( name, fn ) : this.trigger( name );
@@ -41,44 +39,6 @@ define( [ "jquery", "../vmouse", "../support/touch" ], function( jQuery ) {
4139
event.type = originalType;
4240
}
4341

44-
// also handles scrollstop
45-
$.event.special.scrollstart = {
46-
47-
enabled: true,
48-
setup: function() {
49-
50-
var thisObject = this,
51-
$this = $( thisObject ),
52-
scrolling,
53-
timer;
54-
55-
function trigger( event, state ) {
56-
scrolling = state;
57-
triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event );
58-
}
59-
60-
// iPhone triggers scroll after a small delay; use touchmove instead
61-
$this.bind( scrollEvent, function( event ) {
62-
63-
if ( !$.event.special.scrollstart.enabled ) {
64-
return;
65-
}
66-
67-
if ( !scrolling ) {
68-
trigger( event, true );
69-
}
70-
71-
clearTimeout( timer );
72-
timer = setTimeout( function() {
73-
trigger( event, false );
74-
}, 50 );
75-
});
76-
},
77-
teardown: function() {
78-
$( this ).unbind( scrollEvent );
79-
}
80-
};
81-
8242
// also handles taphold
8343
$.event.special.tap = {
8444
tapholdThreshold: 750,
@@ -311,7 +271,6 @@ define( [ "jquery", "../vmouse", "../support/touch" ], function( jQuery ) {
311271
}
312272
};
313273
$.each({
314-
scrollstop: "scrollstart",
315274
taphold: "tap",
316275
swipeleft: "swipe.left",
317276
swiperight: "swipe.right"

js/index.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
'support.js',
1616
'vmouse.js',
1717
'events/touch.js',
18+
'events/scroll.js',
1819
'events/throttledresize.js',
1920
'events/orientationchange.js',
2021
'../external/jquery-ui/jquery.ui.core.js',

js/navigation.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ define( [
1010
"./navigation/history",
1111
"./navigation/navigator",
1212
"./navigation/method",
13-
"./events",
1413
"./support",
1514
"./animationComplete",
1615
"./widgets/pagecontainer",

js/transitions/transition.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@
55
//>>css.structure: ../css/structure/jquery.mobile.transition.css, ../css/structure/jquery.mobile.transition.fade.css
66
//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
77

8-
define( [ "jquery",
9-
"../core",
8+
define( [
9+
"jquery",
10+
"../core",
1011

11-
// TODO event.special.scrollstart
12-
"../events/touch",
13-
"../animationComplete",
12+
// TODO event.special.scrollstart
13+
"../events/scroll",
14+
"../animationComplete",
1415

15-
// TODO $.mobile.focusPage reference
16-
"../navigation" ], function( jQuery ) {
16+
// TODO $.mobile.focusPage reference
17+
"../navigation" ], function( jQuery ) {
1718
//>>excludeEnd("jqmBuildExclude");
1819

1920
(function( $, window, undefined ) {

js/widgets/pagecontainer.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ define( [
1111
"../navigation/history",
1212
"../navigation/navigator",
1313
"../navigation/method",
14-
"../events",
14+
"../events/scroll",
1515
"../support",
1616
"../widgets/page",
1717
"../transitions/handlers" ], function( jQuery ) {

tests/unit/event/event_core.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
(function($){
66
var libName = "jquery.mobile.events.js",
7-
components = [ "events/touch.js", "events/throttledresize.js", "events/orientationchange.js" ],
7+
components = [ "events/touch.js", "events/throttledresize.js", "events/scroll.js",
8+
"events/orientationchange.js" ],
89
absFn = Math.abs,
910
originalPageContainer = $.mobile.pageContainer,
1011
originalEventFn = $.Event.prototype.originalEvent,

tests/unit/event/index.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<script src="../../../js/events.js"></script>
1919
<script src="../../../js/vmouse.js"></script>
2020
<script src="../../../js/events/touch.js"></script>
21+
<script src="../../../js/events/scroll.js"></script>
2122
<script src="../../../js/events/throttledresize.js"></script>
2223
<script src="../../../js/events/orientationchange.js"></script>
2324

0 commit comments

Comments
 (0)