最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實現樓梯滾動特效(jQuery實現)

 更新時間:2021年09月23日 08:55:52   作者:前端小新_XH  
這篇文章主要為大家詳細介紹了JavaScript實現樓梯滾動特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

想必大家都用過JD,在它的首頁里面有個很常見的特性:就是 樓梯特效

對于程序員的我們,可以說是萬物皆可盤。那么,我們就來盤一下它。

先上要實現的效果圖:

效果功能描述:當點擊右側懸浮的按鈕時,點擊相應模塊,左側內容區(qū)域會自動跳轉到該模塊區(qū)域。

下面,上代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        li{
            list-style-type: none;
        }
        .top{
            height:900px;
            background : #ddd;
        }
        .footer{
            height : 600px;
            background : #ddd;
        }
        .content{
            height:800px;
        }
        .content h1{
            text-align:center;
            line-height: 80px;
        }
        .stairs-list{
            width : 60px;
            position: fixed;
            right:5%;
            top:50%;
            margin-top:-120px;
            background : #fff;
        }
        .stairs-list li{
            width:50px;
            height:50px;
            line-height: 25px;
            text-align : center;
            padding:5px;
            border-bottom:1px solid #ddd;
        }
        .stairs-list li.active{
            color : orangered;
        }
        .stairs li span{
            display: block;
 
        }
 
    </style>
</head>
<body>
    <div class="top">
    </div>
    <div class="content" style="background-color : yellowgreen ">
        <h1>京東秒殺</h1>
    </div>
    <div class="content" style="background-color : skyblue ">
        <h1>特色優(yōu)選</h1>
    </div>
    <div class="content" style="background-color : #666 ">
        <h1>頻道廣場</h1>
    </div>
    <div class="content" style="background-color : orangered ">
        <h1>為您推薦</h1>
    </div>
    <div class="footer"></div>
 
    <ul class="stairs-list">
        <li>
            <span>京東</span>
            <span>秒殺</span>
        </li>
        <li>
            <span>特色</span>
            <span>優(yōu)選</span>
        </li>
        <li>
            <span>頻道</span>
            <span>廣場</span>
        </li>
         <li>
            <span>為您</span>
            <span>推薦</span>
        </li>
    </ul>
 
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <script>
        // OOA :
 
        // 1. 初始化數據;
        // 2. 事件綁定;
        // 3. 根據scrollTop值判定所在樓層;
        // 4. 效果添加;
        // 5. 根據點擊事件切換下標;
 
 
        function Stairs( options ){
            this.options = options;
            this.init();
        }
        Stairs.prototype = {
            constructor : Stairs,
            init : function(){
                // 內容元素高度數組;
                this.content_ele_offset_top_list = [];
                // 獲取元素的偏移高度;
                $(this.options.content_selector).offset( function( index , coords) {
                    // 將每一個元素的高度值放入高度列表之中;
                    this.content_ele_offset_top_list.push(coords.top);
                    return coords;
                }.bind(this))
                // 獲取最小高度值;
                var _length  = this.content_ele_offset_top_list.length ; 
                this.min_top = this.content_ele_offset_top_list[0];
                this.max_top = this.content_ele_offset_top_list[_length - 1] + $(this.options.content_selector).last().height();
                this.content_ele_offset_top_list.push(this.max_top);
 
                this.bindEvent();
            },
            bindEvent:function(){
                var $body_html = $("body,html");
                // 保存實例對象的指針;
                // var _this = this;
                var instance = this;
                // 高頻執(zhí)行的scroll事件;
                // 優(yōu)化 : 節(jié)流 ;
                $(document).scroll( function(){
                    var scrollTop = $body_html.scrollTop();
                    this.calStairsIndex(scrollTop);
                }.bind(this))
                
                $(this.options.stairs_selector).click(function(){
                    // 知道當前發(fā)生事件的元素是誰;   this;  因為這jQuery事件綁定處理沒有辦法,在外部傳入當前發(fā)生事件的元素; 這個this不能變;
                    // 當前的實例對象是誰;          this;
                    var index = $(this).index(instance.options.stairs_selector);
                    instance.changeScrollTop(index);
                })
            },
            // 計算當前樓層;
            calStairsIndex : function( st ){
                // 沒有到達樓梯區(qū)域進行隔離;
                if(st < this.min_top || st > this.max_top){ 
                    // console.log(-1);
                    this.index = -1;
                    this.changeStairsBtn();
                    return false 
                };
                // 如果還在范圍之內不用繼續(xù)判斷;
                var _list = this.content_ele_offset_top_list;
                // 如果 st 還在當前index 范圍之內則不繼續(xù)進行查找;
                if(st >= _list[this.index] && st < _list[this.index + 1]){
                    return false;
                }
                // 遍歷 ;
                for(var i = 0 ; i < _list.length ; i ++){
                    if(st >= _list[i] && st < _list[i + 1]){
                        this.index = i;
                        break;
                    }
                }
                this.changeStairsBtn();
            },
            changeStairsBtn : function(){
                if(this.index === -1){
                    $(this.options.stairs_selector).removeClass("active");
                    return false;
                }
                $(this.options.stairs_selector).eq(this.index).addClass("active")
                .siblings()
                .removeClass("active");
            },
            changeScrollTop : function( index ){
                $("body,html").scrollTop(this.content_ele_offset_top_list[index]);
                // 事件觸發(fā)器;
                $(document).trigger("scroll");
            }
        }
 
        var staris = new Stairs({
            content_selector : ".content",
            stairs_selector  : ".stairs-list li"
        });
        console.log(staris);
 
     
    </script>
</body>
</html>

現在,我們也能實現跟它一樣的功能效果了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論

洛川县| 韶山市| 奎屯市| 毕节市| 尖扎县| 栾川县| 西丰县| 旺苍县| 昭觉县| 慈溪市| 泗阳县| 稻城县| 尼勒克县| 新郑市| 台江县| 娱乐| 宜丰县| 仁寿县| 运城市| 弥勒县| 渭南市| 天全县| 潞西市| 秦安县| 蒲江县| 贺州市| 镇江市| 丰原市| 腾冲县| 甘洛县| 屯留县| 临澧县| 长子县| 永城市| 抚顺县| 石门县| 巴林左旗| 西安市| 饶平县| 龙江县| 社旗县|