spacer

Webref WebRef   Sitemap · Experts · Tools · Services · Newsletters · About i.com

home / experts / dhtml / column23
Developer News
Mandrake Linux Founder Back, Virtually
Amazon: We're a Technology Company
Sun Expands MySQL With Closed Source
Logo

Scrollbars for Navigator 4 LAYERs, Part I
makeScroll()


The Complete Function

The complete makeScroll() looks like this:

function makeScroll(){
   elMain =  document.elCont.document.elMain;
   elScroll = document.elCont.document.elScroll;

   if (elMain.origTop) elMain.top = elMain.origTop;
   elMain.origTop = elMain.top;
   elMain.clip.top = 0;

   if (elMain.origHeight) elMain.clip.height = elMain.origHeight;
   elMain.origHeight = elMain.clip.height;

   docHeight = elMain.document.height;
   lyrHeight = elMain.clip.height;

   if (docHeight <= lyrHeight){
      elScroll.visibility = "hide";
      return;
   }

   elThumb = elScroll.document.elThumb;
   elThumb.top = barWidth;
   elThumbBot = elThumb.document.elThumbBot;

   elvBarHeight = elScroll.clip.height - (barWidth*2);
   thumbHeight = Math.max((lyrHeight*elvBarHeight)/docHeight,thumbMinHeight)
   elThumb.clip.height = thumbHeight;
   elThumbBot.top = thumbHeight - elThumbBot.clip.height;
   thumbMaxTop = (elvBarHeight + barWidth) - thumbHeight;

   docToTravel = docHeight - lyrHeight;
   scrToTravel = elvBarHeight - thumbHeight;
   scrPixels = scrToTravel/docToTravel;
   docPixels = docToTravel/scrToTravel;

   upImage = elScroll.document.images[0];
   elButtonBot = elScroll.document.elButtonBot;
   downImage = elButtonBot.document.images[0];

   upImage.direction = 0;
   downImage.direction = 1;
   upImage.onmousedown = butDown;      
   downImage.onmousedown = butDown;

   elThumb.captureEvents(Event.MOUSEDOWN); 
   elThumb.onmousedown = thumbDown;

   elBG = elScroll.document.elBG;
   elBGcol = elScroll.document.elBGcol;
   elBG.captureEvents(Event.MOUSEDOWN);
   elBG.onmousedown = bgDown;

   elScroll.visibility="show";
}

Line-by-Line

First on our agenda is to give one-word identifiers to the two distinct layers we will have cause to refer to over and over again, the content layer and the scrollbar. Although the current version refers to the hard-coded layers, we will always want to identify a content layer and its associated scrollbar. The first two lines, therefore, achieve this identification and are the last statements we will discuss that refer directly to our example. The remainder of our discussion is generic and will always apply:

    elMain = document.elCont.document.elMain;
    elScroll = document.elCont.document.elScroll;

With these two layers associated with our technique identified, we get down to the fun stuff.

Remember that makeScroll() is called every time the content layer is loaded. This may occur after a scroll of the previous content. We, therefore, first ensure that the content is positioned at the beginning:

    if (elMain.origTop) elMain.top = elMain.origTop;
    elMain.origTop = elMain.top;
    elMain.clip.top = 0;

When we scroll, elMain's top property is constantly changed. The first time makeScroll() is called, no scroll has yet occurred, so we assume that top is the default specified by the author in the layer definition. (In our example, for instance, it is 2) We will assign this to a custom property of the content layer, origTop. The first time through, elMain.origTop does not exist, so the first statement above is overlooked. The next line assigns top to origTop. We now have a variable that always reflects the original default top of elMain, whether it has been scrolled or not. On our next visits to makeScroll(), origTop will exist, so we will position elMain to the default top.

The clip.top property, also changed during a scroll, is set to 0. Now our content layer displays the first layerful of content.

Having set the clip.top, we must set the clip.height as well, since this, too, has changed during a scroll. We track the original clip.height with the same logic used for tracking the original top:

    if (elMain.origHeight) elMain.clip.height = elMain.origHeight;
    elMain.origHeight = elMain.clip.height;

Next, we need to know how much of the content is not in the visible layer. That is, how much is off the bottom of the layer. The document.height property gives us the complete content height, visible or hidden, and clip.height tells us how high the content layer is. We assign these values to docHeight and lyrHeight, respectively:

    docHeight = elMain.document.height;
    lyrHeight = elMain.clip.height;

If the content height is less than the layer height, we will not need a scrollbar, so elScroll is hidden (it may be visible from a previous load) and makeScroll() terminates execution:

    if (docHeight <= lyrHeight){
        elScroll.visibility = "hide";
        return;
    }

No scrollbar is needed, so none is created. If, of course, the content height is greater than the layer height, there is content in need of scrolling, so makeScroll() continues execution.



Produced by Peter Belesis and

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info

Legal Notices, Licensing, Reprints, Permissions, Privacy Policy.
Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

webref The latest from WebReference.com Browse >
Working with the DOM Stylesheets Collection · Administering RBAC in PHP 5 CMS Framework · xref: Automatic Cross Referencing Script
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
Combine BottomCount() with Other MDX Functions to Add Sophistication · Creating a Daemon with Python · The Coming Voice-over-WiMAX Revolution

All Rights Reserved. Legal Notices.
Created: Jan 12, 1999
Revised: Jan 12, 1999

URL: http://www.webreference.com/dhtml/column23/NSscrMake1.html