博客随笔

导航

随浏览器滚动条上下移动的菜单

  今天能收到dudu老师(请恕我如此冒昧的称呼dudu)对我文章的答复感到由衷的高兴,感谢dudu对我的鼓励和支持。好了,言归正传,开始进入今天的正题吧。我想许多开发人员都遇到过这样的问题吧,当用户浏览网页内容时,如果页面的篇幅过长,致使左侧导航条不能直接呈现给用户,当用户需要浏览其他内容时,就会造成很大的不便。我发现了一个javascript函数,它能使导航条随浏览器的滚动而上下移动,很好的解决了以上问题。使用很简单,只要在页面中添加一个名叫floater的层,将导航条内容放置在里面,再添加下面的脚本就OK了!

<SCRIPT language=JavaScript>
 self.onError=null;       
 currentX = currentY = 0;
 whichIt = null;     
    lastScrollX = 0; lastScrollY = 0;       
 NS = (document.layers) ? 1 : 0;       
 IE = (document.all) ? 1: 0;       
 <!-- STALKER CODE -->
 function heartBeat() {       
  if(IE) { diffY = document.body.scrollTop; diffX = document.body.scrollLeft; }       
     if(NS) { diffY = self.pageYOffset; diffX = self.pageXOffset; }       
  if(diffY != lastScrollY) { percent = .1 * (diffY - lastScrollY);       
        if(percent > 0) percent = Math.ceil(percent);       
        else percent = Math.floor(percent);       
        if(IE) document.all.floater.style.pixelTop += percent;       
        if(NS) document.floater.top += percent;        
     lastScrollY = lastScrollY + percent;       
     }       
  if(diffX != lastScrollX) {       
   percent = .1 * (diffX - lastScrollX);       
   if(percent > 0) percent = Math.ceil(percent);       
   else percent = Math.floor(percent);       
   if(IE) document.all.floater.style.pixelLeft += percent;       
   if(NS) document.floater.left += percent;       
   lastScrollX = lastScrollX + percent;       
  }        
 } <!-- /STALKER CODE -->
 <!-- DRAG DROP CODE -->
       
 function checkFocus(x,y) {        
         stalkerx = document.floater.pageX;       
         stalkery = document.floater.pageY;       
         stalkerwidth = document.floater.clip.width;       
         stalkerheight = document.floater.clip.height;       
         if( (x > stalkerx && x < (stalkerx+stalkerwidth)) && (y > stalkery && y < (stalkery+stalkerheight))) return true;       
         else return false;       
 }       
       
 function grabIt(e) {       
  if(IE) {       
   whichIt = event.srcElement;       
   while (whichIt.id.indexOf("floater") == -1) {       
    whichIt = whichIt.parentElement;       
    if (whichIt == null) { return true; }       
      }       
   whichIt.style.pixelLeft = whichIt.offsetLeft;       
      whichIt.style.pixelTop = whichIt.offsetTop;       
   currentX = (event.clientX + document.body.scrollLeft);       
      currentY = (event.clientY + document.body.scrollTop);         
  } else {        
         window.captureEvents(Event.MOUSEMOVE);       
         if(checkFocus (e.pageX,e.pageY)) {        
 whichIt = document.floater;       
 StalkerTouchedX = e.pageX-document.floater.pageX;       
 StalkerTouchedY = e.pageY-document.floater.pageY;       
         }   }       
     return true;       
 }       
       
 function moveIt(e) {       
  if (whichIt == null) { return false; }       
  if(IE) {       
      newX = (event.clientX + document.body.scrollLeft);       
      newY = (event.clientY + document.body.scrollTop);       
      distanceX = (newX - currentX);    distanceY = (newY - currentY);      currentX = newX;    currentY = newY;       
      whichIt.style.pixelLeft += distanceX;      whichIt.style.pixelTop += distanceY;       
   if(whichIt.style.pixelTop < document.body.scrollTop) whichIt.style.pixelTop = document.body.scrollTop;   if(whichIt.style.pixelLeft < document.body.scrollLeft) whichIt.style.pixelLeft = document.body.scrollLeft;       
   if(whichIt.style.pixelLeft > document.body.offsetWidth - document.body.scrollLeft - whichIt.style.pixelWidth - 20) whichIt.style.pixelLeft = document.body.offsetWidth - whichIt.style.pixelWidth - 20;       
   if(whichIt.style.pixelTop > document.body.offsetHeight + document.body.scrollTop - whichIt.style.pixelHeight - 5) whichIt.style.pixelTop = document.body.offsetHeight + document.body.scrollTop - whichIt.style.pixelHeight - 5;       
   event.returnValue = false;       
  } else {       
   whichIt.moveTo(e.pageX-StalkerTouchedX,e.pageY-StalkerTouchedY);       
         if(whichIt.left < 0+self.pageXOffset) whichIt.left = 0+self.pageXOffset;       
         if(whichIt.top < 0+self.pageYOffset) whichIt.top = 0+self.pageYOffset;       
         if( (whichIt.left + whichIt.clip.width) >= (window.innerWidth+self.pageXOffset-17)) whichIt.left = ((window.innerWidth+self.pageXOffset)-whichIt.clip.width)-17;       
         if( (whichIt.top + whichIt.clip.height) >= (window.innerHeight+self.pageYOffset-17)) whichIt.top = ((window.innerHeight+self.pageYOffset)-whichIt.clip.height)-17;       
         return false;       
  }       
     return false;       
 }       
 function dropIt() {       
  whichIt = null;       
     if(NS) window.releaseEvents (Event.MOUSEMOVE);       
     return true;       
 }       
 <!-- DRAG DROP CODE -->
 if(NS) {       
  window.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN);       
  window.onmousedown = grabIt;       
   window.onmousemove = moveIt;       
  window.onmouseup = dropIt;       
 }       
 if(IE) {       
  document.onmousedown = grabIt;       
   document.onmousemove = moveIt;       
  document.onmouseup = dropIt;       
 }       
 if(NS || IE) action = window.setInterval("heartBeat()",1);       
</SCRIPT>

posted on 2004-02-04 17:50  小康  阅读(1146)  评论(0)    收藏  举报