Set timer using deferred object
Alternative to setTimeout delays using deferred object.
by FiNGAHOLiC
HTML
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
<div class="box"></div>
CSS
.box{
width:50px;
height:50px;
position:absolute;
top:0;
left:0;
z-index:1;
background:#c00;
}
JavaScript
// http://msdn.microsoft.com/en-us/scriptjunkie/gg723713
$.createCache = function(requestFunction){
var cache = {};
return function(key, callback){
if(!cache[key]){
cache[key] = $.Deferred(function(defer){
requestFunction(defer, key);
}).promise();
};
return cache[key].done(callback);
};
};
var readyTime;
$(function(){
readyTime = $.now();
console.log(readyTime);
});
$.afterDOMReady = $.createCache(function(defer, delay){
delay = delay || 0;
$(function(){
var delta = $.now() - readyTime;
if(delta >= delay){
defer.resolve();
}else{
setTimeout(defer.resolve, delay - delta);
};
});
});
$(function(){
var $box = $('.box');
$.afterDOMReady(5000).done(function(){
$box.animate({
left : 200
});
});
});