下邊條隨鼠標(biāo)移動的導(dǎo)航欄

很喜歡這個效果,可以經(jīng)常練習(xí),這個效果的難點在于一個緩動運動,以及藍條跟隨鼠標(biāo)移動

<div class="nav-box" id="nav-box">
            <a href="#" class="nav-item">Griffin</a>
            <a href="#" class="nav-item">Paul</a>
            <a href="#" class="nav-item">Tomas</a>
            <a href="#" class="nav-item">Holiday</a>
            <a href="#" class="nav-item">Curry</a>
            <span class="line" id="line"></span>
</div>

用一個盒子,里面是五個a標(biāo)簽,因此要給a標(biāo)簽display:block


html,body{
        margin: 0;
        padding: 0;
            }
.nav-box{
        width: 800px;
        height: 56px;
        background-color: #BAB5B9;
        position: relative;
        margin: 100px auto;
            }
.nav-item{
        width:150px;
        height:56px;
        line-height: 56px;
        background-color: indianred;
        text-align: center;
        display: block;
        float: left;
        border-right: 1px solid #BAB5B9;
        color: #fff;
        font-size: 20px;
        font-family: "微軟雅黑";
        text-decoration: none;
            }
.line{
        width: 150px;
        position: absolute;
        height: 5px;
        background-color: dodgerblue;
        left: 0;
        bottom: -5px;
            }

span做的藍條要相對盒子進行絕對定位,來調(diào)整位置


js部分

1.要注意用getElementsByClassName獲取到的是一個html集合,在循環(huán)中操作要帶上索引
2.先驗證有不有定時器的存在
3.運動部分封裝在函數(shù)里

<script>
            var getitem = document.getElementsByClassName('nav-item');
            //var getitem = document.getElementById("nav-box").getElementsByTagName("a");
            var getline = document.getElementById("line");
            //alert(getline.nodeName); 打印出來的標(biāo)簽名是大寫
            //alert(getitem[0].nodeName);
            var timer = null;
            getline.style.left =0;    //不進行賦空沒效果?
            for (var i = 0;i < getitem.length;i++) {
                getitem[i].onmouseenter = function(){
                    if(timer){
                        clearTimeout(timer);
                    } //清除已存在的定時器
                    var start = parseInt(getline.style.left);
                    var end = this.offsetLeft;  //元素的邊框的外邊緣距離與已定位的父容器(offsetparent)的左邊距離
                    move(start,end);
                }
            }
            function move(startpos,endpos){
                var step = (endpos - startpos)/10;
                if(step > 0){
                    step = Math.ceil(step);
                }else{
                    step = Math.floor(step);
                }
                startpos = startpos + step;
                getline.style.left = startpos + "px";
                if(startpos == endpos){
                    clearTimeout(timer);
                }else{
                    timer = setTimeout(function(){
                        move(startpos,endpos);
                    },16);
                }
            }
        </script>
捕風(fēng)格化獲.PNG
navbar.gif

文章內(nèi)容來源于碼匠

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載請聲明 原文鏈接地址 關(guān)注公眾號獲取更多資訊 第一部分 HTML 第一章 職業(yè)規(guī)劃和前景 職業(yè)方向規(guī)劃定位...
    前端進階之旅閱讀 16,621評論 32 459
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補...
    _Yfling閱讀 13,801評論 1 92
  • 移動開發(fā)基本知識點 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,514評論 0 6
  • H5移動端知識點總結(jié) 閱讀目錄 移動開發(fā)基本知識點 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,625評論 0 26
  • 我害怕和陌生人談話。 我總是介意別人眼中的自己是否言辭得當(dāng),是否舉止得體。記得小時候,我曾好奇自己為什么讀不到別人...
    玲音閱讀 794評論 16 25