aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2007-03-17 02:02:01 +0000
committerJohn Resig <jeresig@gmail.com>2007-03-17 02:02:01 +0000
commit1d0dec55bad5d848a083084a9ac0c25dc57f9e1b (patch)
treebd5c2e1f3d5b36d815b001b941c57faeb5fedf58 /src
parent83b43a1e927d6b260f35f75bc2c3d177f271be93 (diff)
downloadjquery-1d0dec55bad5d848a083084a9ac0c25dc57f9e1b.tar.gz
jquery-1d0dec55bad5d848a083084a9ac0c25dc57f9e1b.zip
Animations now use a single interval timer, global for all animations. This severely improves the performance and responsiveness of the animations in most browsers.
Diffstat (limited to 'src')
-rw-r--r--src/fx/fx.js27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/fx/fx.js b/src/fx/fx.js
index 163f0f65c..933c9bf40 100644
--- a/src/fx/fx.js
+++ b/src/fx/fx.js
@@ -400,6 +400,8 @@ jQuery.extend({
}
},
+ timers: [],
+
/*
* I originally wrote fx() as a clone of moo.fx and in the process
* of making it small in size the code became illegible to sane
@@ -452,9 +454,20 @@ jQuery.extend({
z.now = from;
z.a();
- z.timer = setInterval(function(){
- z.step(from, to);
- }, 13);
+ jQuery.timers.push(function(){
+ return z.step(from, to);
+ });
+
+ if ( jQuery.timers.length == 1 ) {
+ var timer = setInterval(function(){
+ jQuery.timers = jQuery.grep( jQuery.timers, function(fn){
+ return fn();
+ });
+
+ if ( !jQuery.timers.length )
+ clearInterval( timer );
+ }, 13);
+ }
};
// Simple 'show' function
@@ -516,10 +529,6 @@ jQuery.extend({
var t = (new Date()).getTime();
if (t > options.duration + z.startTime) {
- // Stop the timer
- clearInterval(z.timer);
- z.timer = null;
-
z.now = lastNum;
z.a();
@@ -555,6 +564,8 @@ jQuery.extend({
if ( done && jQuery.isFunction( options.complete ) )
// Execute the complete function
options.complete.apply( elem );
+
+ return false;
} else {
var n = t - this.startTime;
// Figure out where in the animation we are and set the number
@@ -569,6 +580,8 @@ jQuery.extend({
// Perform the next step of the animation
z.a();
}
+
+ return true;
};
}