zoukankan      html  css  js  c++  java
  • 悬浮导航栏的实现以及导航跳转

    随着页面复杂程度的增加,导航栏的设计就显得尤为重要。顾名思义,导航,就像航海中的指明灯一样,要一直存在。实际中都是用户把页面卷进去一定高度的时候(此时导航栏可能已从页面上消失),导航栏要始终固定在页面的某一部分,一般都为最顶端。

    先介绍用到的一些属性offsetTop,scrollTop. 

    offsetTop:获取元素相对于页面顶端的高度,只读,返回的是Number型。

    scrollTop:获取或设置元素相对于垂直滚动条顶部的偏移,可读写,返回Number型。当一个元素的实际高度超过其显示区域的高度时,在一定的设置下,浏览器会为该元素显示相应的垂直滚动条。此时,scrollTop返回的就是该元素在可见区域之上被隐藏部分的高度。

    a)悬浮导航栏 

     页面结构:

     1 <div id="navigation">
     2     <a href="">1</a>
     3     <a href="">2</a>
     4     <a href="">3</a>
     5     <a href="">4</a>
     6 </div>
     7 <div class="model">1</div>
     8 <div class="model">2</div>
     9 <div class="model">3</div>
    10 <div class="model">4</div>

    (一)使用position属性实现

    1 #navigation{
    2   position: relative;
    3   top: 0;    
    4 }

    使用JS,当导航栏超出显示区域时,即导航栏距页面顶端的初始高度小于滚动条的垂直偏移时,把position属性的值改为fixed.

    var ele = document.getElementById("navigation");
    var top1 = ele.offsetTop;
    function scroll_nav1(){
        var top2 = document.documentElement.scrollTop || document.body.scrollTop;
        if(top2>=top1){
            ele.style.position = "fixed";  
        }else{
            ele.style.position = "relative";  
        }
    }    
    window.onscroll = scroll_nav1;

    (二)改变元素的style.top属性值(top可读写,返回string型)

    因为offsetTop只读,所以可以改变top的值实现。

     1 var ele = document.getElementById("navigation");
     2 var top1 = ele.offsetTop;
     3 function scroll_nav2(){
     4   var top2 = document.documentElement.scrollTop||document.body.scrollTop;
     5   if(top2>=top1){
     6      ele.style.top = (top2-top1)+"px";  
     7    }else{
     8      ele.style.top = 0;  
     9   }
    10 }
    11 window.onscroll = scroll_nav2;

    b)导航跳转

      点击导航栏上的链接跳转到指定区域,如果导航栏已经处于悬浮状态,即脱离了正常的文档流,那么对于arr2中元素的offsetTop属性的计算就有影响(悬浮前后,该值有两个结果),导致页面显示不统一。所以要在navigation外面再包一层占位(高度要设定)。

     1 <div id="h"> 
     2   <div id="navigation">
     3       <a href="">1</a>
     4       <a href="">2</a>
     5       <a href="">3</a>
     6       <a href="">4</a>
     7   </div>
     8 </div>
     9   <div class="model">1</div>
    10   <div class="model">2</div>
    11   <div class="model">3</div>
    12   <div class="model">4</div>
     1 var arr1 = document.getElementById("navigation").getElementsByTagName("a");
     2 var arr2 = document.getElementsByName("model");
     3 var h1 = document.getElementById("h").offsetHeight;
     4 for(var i=0 ; i<arr1.length ; i++){
     5   arr1[i].onclick = (function(num){
     6       return function(){
     7          var obj = document.body || document.documentElement;
     8          obj.scrollTop = arr2[num].offsetTop - h1;
     9       }      
    10    })(i)  
    11 }
  • 相关阅读:
    学习动态性能表 第五篇V$SESSION
    学习动态性能表 第八篇V$LOCK
    学习动态性能表 第十九篇V$UNDOSTAT
    学习动态性能表 第四篇(1)V$SQLTEXT
    学习动态性能表 第十六篇V$ROWCACHE
    学习动态性能表 第十八篇V$SYSTEM_EVENT
    备份打开的数据库脚本
    学习动态性能表 第九篇V$FILESTAT
    学习动态性能表 第六篇(1)V$SESSION_WAIT
    学习动态性能表 第二十篇V$WAITSTAT
  • 原文地址:https://www.cnblogs.com/gaohui/p/5297676.html
Copyright © 2011-2022 走看看