I finally have the answer: there is only one timer that enlivens everything on the page. If there is something in the queues, a timer is created that moves everything, and as soon as everything is done, the timer will be killed:
HTML used:
<div id="test1" class="tests" style="background-color:#FFF; border:1px solid #000; width:40px; height:40px; position:absolute; left:0px; top:0px;"></div> <div id="test2" class="tests" style="background-color:#FFF; border:1px solid #000; width:40px; height:40px; position:absolute; left:0px; top:50px;"></div>
Used JavaScript:
var setIntervalDecorated = setInterval; setInterval = function(func, delai) { var id = setIntervalDecorated(func, delai); console.log('setInterval: ' + id + ' (' + delai + 'ms)'); return id; }; var clearIntervalDecorated = clearInterval; clearInterval = function(id) { console.log('clearInterval: ' + id); clearIntervalDecorated(id); };
Test:
Test 1
$('#test1').animate({ left: '+=500' }, 5000, function() { console.log('test1: Animation complete'); }); setInterval: 5 (13ms) test1: Animation complete clearInterval: 5
Test 2
$('.tests').animate({ left: '+=500' }, 5000, function() { console.log('tests: Animation complete'); }); setInterval: 5 (13ms) tests: Animation complete tests: Animation complete tests: Animation complete clearInterval: 5
Test 3
$('#test1').animate({ left: '+=500' }, 5000, function() { console.log('test1: Animation complete'); }); $('#test2').animate({ left: '+=500' }, 5000, function() { console.log('test2: Animation complete'); }); setInterval: 5 (13ms) test1: Animation complete test2: Animation complete clearInterval: 5
Test 4
$('#test1').animate({ left: '+=500' }, 5000, function() { console.log('test1: Animation complete'); }); setTimeout(function() { $('#test2').animate({ left: '+=500' }, 5000, function() { console.log('test2: Animation complete'); }); }, 1000); setInterval: 5 (13ms) test1: Animation complete test2: Animation complete clearInterval: 5
thanks
Mike gleason jr couturier
source share