樓層跳躍

樓層跳躍.gif
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        body,html {
            height: 100%;
        }
        ul {
            list-style: none;
            height: 100%;
        }
        ul li {
            height: 100%;
        }
        ol {
            list-style: none;
            position: fixed;
            top: 80px;
            left: 50px;
        }
        ol li {
            width: 50px;
            height: 50px;
            border: 1px solid #000;
            text-align: center;
            line-height: 50px;
            margin-top: -1px;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <ul>
        <li>鞋子區(qū)域</li>
        <li>襪子區(qū)域</li>
        <li>褲子區(qū)域</li>
        <li>裙子區(qū)域</li>
        <li>帽子區(qū)域</li>
    </ul>
    <ol>
        <li>鞋子</li>
        <li>襪子</li>
        <li>褲子</li>
        <li>裙子</li>
        <li>帽子</li>
    </ol>

    <script src="animate.js"></script>
    <script>
        //需求:點擊ol中的li,屏幕滑動到對應(yīng)的ul中的li的范圍。
        //思路:還是利用window.scrollTo();利用緩動動畫原理實現(xiàn)屏幕滑動。
        //步驟:
        //0.獲取元素
        //1.指定ul和ol中的li的背景色,對應(yīng)的li背景色相同
        //2.老三步。(獲取元素并綁定事件)
        //3.利用緩動動畫原理實現(xiàn)屏幕滑動
        //4.用scroll事件模擬盒子距離最頂端的距離。

        //0.獲取元素
        var ul = document.getElementsByTagName("ul")[0];
        var ol = document.getElementsByTagName("ol")[0];
        var ulLiArr = ul.children;
        var olLiArr = ol.children;
        var target = 0;var leader = 0;var timer = null;
        //1.指定ul和ol中的li的背景色,對應(yīng)的li背景色相同
        //設(shè)置一個數(shù)組,里面裝顏色,然指定的顏色給數(shù)組中的指定元素
        var arrColor = ["pink","blue","yellow","orange","green"];
        //利用for循環(huán)給兩個數(shù)組的元素上色
        for(var i=0;i<arrColor.length;i++){
            //上色
            ulLiArr[i].style.backgroundColor = arrColor[i];
            olLiArr[i].style.backgroundColor = arrColor[i];


            //屬性綁定索引值
            olLiArr[i].index = i;
            //2.老三步。(并綁定事件)循環(huán)綁定,為每一個li綁定點擊事件
            olLiArr[i].onclick = function () {
                //***獲取目標位置
                    //獲取索引值。
                target = ulLiArr[this.index].offsetTop;

                //要用定時器,先清除定時器
                clearInterval(timer);
                //3.利用緩動動畫原理實現(xiàn)屏幕滑動
                timer = setInterval(function () {
                    //(1).獲取步長
                    var step = (target-leader)/10;
                    //(2).二次處理步長
                    step = step>0?Math.ceil(step):Math.floor(step);
                    //(3).屏幕滑動
                    leader = leader + step;
                    window.scrollTo(0,leader);
                    //(4).清除定時器
                    if(Math.abs(target-leader)<=Math.abs(step)){
                        window.scrollTo(0,target);
                        clearInterval(timer);
                    }
                },25);
            }
        }

        //4.用scroll事件模擬盒子距離最頂端的距離。
        window.onscroll = function () {
            //每次屏幕滑動,把屏幕卷去的頭部賦值給leader,模擬獲取顯示區(qū)域距離頂部的距離
            leader = scroll().top;
        }

    </script>


</body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容