I’ve tried everything that is supposed to invoke a reflow but that isn’t happening. I’m calling my test function 10 times to draw some element on my screen and I move that element through each iteration. That loop is executed immediately and in the end I get one picture instead of seeing the movement of the element on the screen.
It’s as if when all work is done, reflow and drawing on the screen is invoked. But i want to see each drawing.
All the things I’ve tried didn’t give any results. The only thing that works is alert(), but i don’t need an interaction with user.
I’m using an webkit 1.2.5 if that helps.
If I’m not understandable enough I will try to explain better.
This the code I’m forcing to reflow
var i = 0;
for(;i<500;i+=50){
fTestInfo(i);
console.log("Test loop!!! "+i);
}
The thing I nedd is to see a picture on my screen each time fTestInfo(i) is executed but instead, i only see the ending result.
fTestInfo depends on i it moves in left by the value of i.
I see you are using a for loop which typically means you misunderstand how timers work. The for loop is synchronously executed and you are probably setting all the timers at once.
Try this:
demo http://jsfiddle.net/UCfmF/
I suppose you mean getting a value like
.offsetWidth? This is not guaranteed to make a visible reflow on the screen, browsers may wait for some time (read: until javascript execution stops) before actually attempting to paint anything on the screen even if you are doing actions that trigger reflows.This means that if you append 1000 elements to the document, it will not trigger 1000 reflows. Even if you fetch
.offsetWidthin between each iteration. It will just be calculated for you but not necessarily painted.You need to move the elements with a timer as the end of javascript execution is when browsers flush out any queued reflows.
See http://dev.opera.com/articles/view/efficient-javascript/?page=3#reflow