15.5 Auto-Scrolling the Page
NN 4, IE 4
15.5.1 Problem
You want the entire browser page to
automatically scroll vertically for the user.
15.5.2 Solution
With their Version 4 releases, Internet Explorer and Netscape
Navigator empowered their window objects with a
scrollBy( ) method. By invoking it repeatedly
through a setInterval( ) call, you can scroll the
browser window with no user interaction. The following function and
setInterval( ) call do the trick:
function scrollWindow( ) {
window.scrollBy(0, 1);
}
function initScroll( ) {
setInterval("scrollWindow( )", 100);
}
The initScroll( ) function should be invoked by the
onload event handler of the
body element.
15.5.3 Discussion
Determining the optimum scroll speed is not easy, and may even
dissuade you from employing this application except perhaps in a
kiosk environment. Scrolling speed is governed by two variables: the
number of pixels of the increment (the second parameter of
scrollBy( )) and how often the
scrollWindow( ) function is invoked (the interval
time specified in the setInterval(
) method call). If the pixel increment is
too large, the page jumps in big steps that are difficult for the eye
to track for any length of time. The smaller the increment, the
better, as shown by the one-pixel jumps in the solution.
Frequency is specified by the nominal number of milliseconds between
calls to the scrollWindow(
) function. Too large a number makes the
page scroll painfully slowly for moderate reading speeds. Too small a
number may lead to more comfortable reading in an ideal environment,
but it points out a potential problem beyond your control: repetitive
execution of the setInterval( )
method's function does not fire in absolutely
uniform intervals. The smaller the interval, the more you see the
results in bursts of smooth scrolling followed by brief stuttering.
To check on the progress of the autoscroll through the page, you can
read the instantaneous scroll amount (in pixels); however, the syntax
varies not only between Netscape and IE, but also between
standards-compatible mode and quirks mode in IE 6. For Netscape 6 or
later, get the read-only properties window.scrollX
and window.scrollY. For older IE versions and IE 6
running in backward-compatible mode, use
document.body.scrollLeft and
document.body.scrollTop. In the CSS-compatibility
mode of IE 6, use
document.body.parentElement.scrollLeft and
document.body.parentElement.scrollTop. The latter
pair reads the scroll values for the entire html
element filling the window.
15.5.4 See Also
Recipe 13.12 for an alternative way to scroll content (in a
positioned div element) without scrolling the
window.
|