devxlogo

DHTML Window Redraw

DHTML Window Redraw

Question:
Is there any way to control the redrawing/repainting of the open window/document? Specifically, I have to change page elements (labels, cursor style) before calling some time intensive task. I have successfully implemented changes to the cursor style but it doesn’t always change the display of the mouse cursor immediately.

Answer:
Whenever a script is evaluated (at least in Internet Explorer), the parsing agent takes over and handles all of the manipulation in a significant number of cases. For this reason, you can’t use synchronous calls to animate a screen–the script has to be interpreted first, and the result gets displayed only after the script terminates. One way around this is to perform the changing call asynchronously.

For example, suppose that I wanted to turn the cursor to an hourglass wait state before beginning some kind of a lengthy operation. The logical code to do this would be:

document.body.style.cursor="wait";for (var index=0;index

This code, however, doesn't change the cursor, because the scripting engine currently has control of the action. However, you can fork it (to use an old Unix term) so that it exists on its own processing thread:

window.setTimeout("document.body.style.cursor='wait'", 0, "JavaScript")for (var index=0;index

The setTimeout call essentially invokes a new thread, which will execute independently of the rest of the script. By setting the time to 0 ms, the call will be made automatically. Since the last step in the action is to set the cursor style back, the focus will return to the browser and the cursor will get updated back to its default value.

devx-admin

Share the Post: