階段を転がす特殊効果を実現する JavaScript (jQuery 実装)

階段を転がす特殊効果を実現する JavaScript (jQuery 実装)

皆さんもJDを使ったことがあると思います。ホームページには非常によく見られる機能があります。階段の特殊効果です

私たちプログラマーにとって、すべてをディスクに保存できます。それでは見てみましょう。

まず、達成される効果図を見てみましょう。

効果機能の説明: 右側のフローティングボタンをクリックし、対応するモジュールをクリックすると、左側のコンテンツ領域が自動的にモジュール領域にジャンプします。

以下にコードを示します。

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
    <スタイル>
        *{
            マージン:0;
            パディング:0;
        }
        li{
            リストスタイルタイプ: なし;
        }
        。トップ{
            高さ:900ピクセル;
            背景: #ddd;
        }
        .フッター{
            高さ: 600px;
            背景: #ddd;
        }
        。コンテンツ{
            高さ:800px;
        }
        .コンテンツ h1{
            テキスト配置:中央;
            行の高さ: 80px;
        }
        .階段リスト{
            幅: 60px;
            位置: 固定;
            右:5%;
            上位:50%;
            上マージン:-120px;
            背景: #fff;
        }
        .stairs-list li{
            幅:50px;
            高さ:50px;
            行の高さ: 25px;
            テキスト配置: 中央;
            パディング:5px;
            border-bottom:1px 実線 #ddd;
        }
        .stairs-list li.active{
            色:オレンジ;
        }
        .stairs li span {
            表示: ブロック;
 
        }
 
    </スタイル>
</head>
<本文>
    <div class="top">
    </div>
    <div class="content" style="background-color: yellowgreen ">
        <h1>京東フラッシュセール</h1>
    </div>
    <div class="content" style="background-color:skyblue">
        <h1>おすすめセレクション</h1>
    </div>
    <div class="content" style="背景色: #666 ">
        <h1>チャンネルプラザ</h1>
    </div>
    <div class="content" style="background-color: orangered ">
        <h1>あなたにおすすめ</h1>
    </div>
    <div class="フッター"></div>
 
    <ul class="階段リスト">
        <li>
            <span>JD.com</span>
            <span>2 回目のキル</span>
        </li>
        <li>
            特徴
            <span>推奨</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>
    <スクリプト>
        // 補足:
 
        // 1. データを初期化します。
        // 2. イベントバインディング;
        // 3. scrollTop 値に基づいてフロアを決定します。
        // 4. エフェクトの追加;
        // 5. クリック イベントに応じて下付き文字を切り替えます。
 
 
        関数階段(オプション){
            this.options = オプション;
            これを初期化します。
        }
        階段.prototype = {
            建設者:階段、
            初期化:関数(){
                // コンテンツ要素の高さの配列;
                this.content_ele_offset_top_list = [];
                // 要素のオフセット高さを取得します。
                $(this.options.content_selector).offset( 関数( インデックス、 座標) {
                    // 各要素の高さの値を高さリストに格納します。
                    this.content_ele_offset_top_list.push(coords.top);
                    座標を返します。
                }.bind(これ)
                // 最小の高さの値を取得します。
                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);
 
                このイベントをバインドします。
            },
            バインドイベント:関数(){
                var $body_html = $("body,html");
                //インスタンス オブジェクトのポインタを保存します。
                // var _this = this;
                var インスタンス = this;
                // 高頻度スクロールイベント。
                // 最適化: スロットル;
                $(document).scroll( 関数(){
                    var scrollTop = $body_html.scrollTop();
                    this.calStairsIndex(スクロールトップ);
                }.bind(これ)
                
                $(this.options.stairs_selector).click(function(){
                    // 現在イベントが発生している要素を把握します。この jQuery イベント バインディング プロセスでは、イベントが現在外部で発生している要素を渡す方法がないため、これを変更することはできません。
                    //現在のインスタンス オブジェクトは誰ですか。this;
                    var index = $(this).index(instance.options.stairs_selector);
                    インスタンスのスクロールトップを変更(インデックス)。
                })
            },
            // 現在のフロアを計算します。
            calStairsIndex: 関数(st){
                // 隔離のための階段エリアに到達しませんでした。
                if(st < this.min_top || st > this.max_top){ 
                    // コンソール.log(-1);
                    this.index = -1;
                    this.changeStairsBtn();
                    偽を返す 
                };
                // まだ範囲内であれば、判断を続ける必要はありません。
                var _list = this.content_ele_offset_top_list;
                // st がまだ現在のインデックス範囲内にある場合は、検索を続行しません。
                if(st >= _list[this.index] && st < _list[this.index + 1]){
                    false を返します。
                }
                // トラバース;
                for(var i = 0; i < _list.length; i++){
                    st >= _list[i] && st < _list[i + 1] の場合{
                        this.index = i;
                        壊す;
                    }
                }
                this.changeStairsBtn();
            },
            階段ボタンの変更: 関数(){
                if(this.index === -1){
                    $(this.options.stairs_selector).removeClass("アクティブ");
                    false を返します。
                }
                $(this.options.stairs_selector).eq(this.index).addClass("アクティブ")
                。兄弟()
                .removeClass("アクティブ");
            },
            changeScrollTop: 関数(インデックス){
                $("body,html").scrollTop(this.content_ele_offset_top_list[index]);
                // イベントトリガー;
                $(document).trigger("スクロール");
            }
        }
 
        var staris = 新しい階段({
            コンテンツセレクター: ".content",
            階段セレクター: ".stairs-list li"
        });
        コンソールにログ出力します。
 
     
    </スクリプト>
</本文>
</html>

今、私たちは同じ機能効果を達成することができます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Jsはテキストボックスと組み合わせたテキストクライミングスクロール効果を実現します
  • 床スクロール効果を実現する js

<<:  Dockerイメージのサイズを縮小する6つの方法

>>:  mysql の not equal to null と equal to null の書き方の詳細説明

推薦する

セマンティックHTML構造を理解する方法

HTML と CSS は誰もが知っていると思います。HTML の構造と CSS の表現の分離も知って...

Dockerコンテナを介してランプアーキテクチャを構築するプロセス

目次1. Centosイメージを取得する2. nginxイメージをビルドする3. MySQLイメージ...

最新のウェブフロントエンドフレームワーク10選を紹介(翻訳)

Web 開発の世界では、フレームワークは非常に一般的です。新しいフレームワークやテンプレートが毎日の...

Vue2.0/3.0 での provide と inject の使用例

目次1. provide/inject の用途は何ですか? 2. provide/injectの使い...

CSS3は円錐グラデーション効果を実現します

文法:背景画像: 円錐グラデーション(位置の角度から、開始色、...、最後の色)最初のパラメータ:開...

HTMLは正規表現を使用してテーブルの例をテストします

以下は、HTML で正規表現を使用してテーブルをチェックするサンプル コードです。具体的なコードの内...

VueはOSSを使用して画像や添付ファイルをアップロードします

OSS を使用して Vue プロジェクトに画像や添付ファイルをアップロードするここでは、写真のアップ...

Linux ログ内のキーワードとその前後の情報を検索する方法の例

日常業務では、ログを表示する必要がよくあります。たとえば、 tail コマンドを使用してログをリアル...

トップに戻るボタンを実装するJavaScript

この記事では、トップに戻るボタンを実装するためのJavaScriptの具体的なコードを参考までに紹介...

Vue+express+Socketでチャット機能を実現

この記事では、チャット機能を実現するためのVue+express+Socketの具体的なコードを参考...

開発環境にUbuntu 16をインストール後の初期設定

オフィスでは、Linux 開発環境として Ubuntu システムが必要です。現在、Ubuntu 16...

CSS中級者向けアダプティブレイアウトの5つのソリューションの詳細な説明

序文ページを作っていく上で、ページレイアウトに関する内容に遭遇することが多く、面接でも聞かれることも...

一般的なブラウザのユーザーエージェントの概要

1. 基礎知識: HTTP ヘッダー ユーザーエージェントユーザー エージェントは、ユーザー エージ...

MySQL エンコーディング utf8 および utf8mb4 utf8mb4_unicode_ci および utf8mb4_general_ci

参考: MySQL 文字セットの概要utf8mb4 は MySQL 8.0 のデフォルトの文字セット...

MySQLトリガーの使用

目次1. トリガーの紹介1. トリガーとは何ですか? 2. トリガーの特徴2. トリガーを作成する1...