JavaScript を使用してセカンダリ メニューを作成する

JavaScript を使用してセカンダリ メニューを作成する

この記事では、セカンダリメニュー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。具体的な内容は次のとおりです。

この実装の効果図は次のとおりです。

このセカンダリメニューの効果は次のとおりです。

ボックスをクリックすると、開いているボックスの内容が引き込まれ、現在クリックされているボックスの内容が展開されます。

では、この効果はどのようにして達成されるのでしょうか?

私たちは一歩ずつ

1. まず、フレーム全体、つまりすべてのボックスが展開された外観を表示する必要があります。これは、表示/非表示がoverflow:hiddenによって行われるためです。
ただし、すべてのボックスに同じタイプのボックスを使用しないように注意してください。これは、js コードの記述に不便だからです。結局のところ、次の操作は緑のボックスをクリックして白いボックスを折りたたんだり展開したりすることなので、各日と対応するコース ボックスを div 親ボックスの下に配置する必要があります。次に初期化します。高さをスパンの高さと同じに設定し、 overflow:hiddenを設定します。以下に示すように、次のコードを組み合わせることができます。

2. 次に、js 部分の作成を開始します。ボックスがクリックされると、閉じた状態から展開された状態に変わることを確認します。このボックスは span です。span の親 div のすべてのコンテンツを表示する場合は、まずdocument.getElementsByTagName("span")を介してすべての span を取得し、次に for ループを使用して各 span のonclick応答関数のparentNodeを介して対応する親ボックスを取得する必要があります。これにより、親ボックスの高さがそのscrollHeight

3. 次に、ボックスを展開するために span をクリックしたときに、展開されたボックスを折りたたむ必要があります。このとき、前回クリックされたボックスを記録するための変数now が必要です。初期値を null に設定します。now が現在クリックされているスパンと等しくない場合は、now の親ボックスを取得し、その高さをスパンの高さに設定してから、現在クリックされているスパンを展開します (展開方法については、2 番目のポイントで既に説明しました)。now が現在クリックされているスパンと等しい場合は、その親ボックスの高さを取得します。それがスパンの高さと等しい場合は、その高さをscrollHeightの値に設定し、そうでない場合はスパンの高さに設定します。

4.タイマーを設定し、親ボックスの高さを増減する準備ができたら呼び出します。親ボックスの高さがスパンの高さに達するか、 scrollHeightに達すると、タイマーをオフにします(タイマーは2つ設定できます)。

コードは次のとおりです。

<!DOCTYPE html>
<html lang="ja">

<ヘッド>
    <メタ文字セット="UTF-8">
    <meta http-equiv="X-UA-compatible" content="IE=edge">
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
    <title>ドキュメント</title>
    <スタイル>
        * {
            マージン: 0;
            パディング: 0;
        }

        。容器 {
            幅: 300ピクセル;
            高さ: 700ピクセル;
            マージン: 100px 自動;
        }

        .コンテナdiv {
            高さ: 43px;
            オーバーフロー: 非表示;
        }

        .コンテナ div span {
            幅: 150ピクセル;
            高さ: 40px;
            行の高さ: 40px;
            境界線の半径: 15px;
            表示: ブロック;
            テキスト配置: 中央;
            背景色: rgba(104, 250, 201, 0.849);
            カーソル: ポインタ;
        }

        {
            幅: 150ピクセル;
            高さ: 40px;
            行の高さ: 40px;
            テキスト装飾: なし;
            表示: ブロック;
            テキスト配置: 中央;
        }
    </スタイル>
</head>

<本文>
    <div class="コンテナ">
        <div id="">
            <span id="one">月曜日</span>
            視覚化
            視覚化
        </div>
        <div id="">
            火曜日
            <a href="">アルゴリズム設計</a>
            <a href="">グラフィックス</a>
            <a href="">デザイングループコースデザイン</a>
            オペレーティング·システム
        </div>
        <div id="">
            <span id="three">木曜日</span>
            <a href="">状況と方針</a>
            オペレーティング·システム
        </div>
        <div id="">
            <span id="four">金曜日</span>
            <a href="">アルゴリズム設計</a>
        </div>
    </div>

    <スクリプト>
        menu = document.getElementsByTagName("span");
        now = null とします。
        (i = 0 とします; i < menu.length; i++) {
            menu[i].onclick = 関数 () {
                par = menu[i].parentNodeとします。
                もし(今 === i){
                    (par.style.height === "43px"の場合){
                        オープン(パー);
                    }
                    それ以外 {
                        閉じる(par);
                    }
                }
                それ以外 {
                    if (now !== null) {
                        メニュー[now].parentNode を閉じます。
                    }
                    オープン(パー);
                    今 = 私;
                }
            }
        }

        関数 open(par) {
            time = setInterval(() => { を設定します。
                num = par.offsetHeightとします。
                (数値 >= par.scrollHeight)の場合{
                    クリア間隔(tem);
                }
                par.style.height = num + 1 + "px";
            }, 7);
        }

        関数close(par){
            time = setInterval(() => { を設定します。
                num = par.offsetHeightとします。
                (数値<= 43)の場合{
                    クリア間隔(tem);
                    戻る;
                }
                par.style.height = num - 1 + "px";
            }, 7);
        }

    </スクリプト>
</本文>

</html>

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

以下もご興味があるかもしれません:
  • ユニバーサルセカンダリメニューコード (css+javascript)
  • jsを実装するだけで、セカンダリメニュー機能を展開できます。
  • Vue.js 左のセカンダリメニューを表示および非表示にするサンプルコード
  • マウスが通過したときにセカンダリメニューのjs効果を表示する
  • jsはセカンダリメニューを水平に右にスライドする効果を実現します
  • JavaScript マウスオーバーでセカンダリメニューの特殊効果を表示
  • Vue.jsはセカンダリメニュー効果を実現します
  • JSはマウスへの超簡略化された応答を実装してセカンダリメニューコードを表示します
  • jsは、セカンダリメニューをクリックすることで現在のコンテンツを表示する効果を実現します。
  • JavaScript+CSSで実装された折りたたみ可能なセカンダリメニューの例

<<:  CSS: 訪問した疑似クラスセレクタの秘密の記憶

>>:  Dockerfileを使用してDockerイメージを構築する手順

推薦する

MySQL は低速クエリを可能にします (EXPLAIN SQL ステートメントの使用の概要)

今日、データベース操作はますますアプリケーション全体のパフォーマンスのボトルネックになりつつあり、こ...

MySQL 同時実行制御の原則に関する知識ポイント

Mysql は、高性能なデータ ストレージ サービスを提供する主流のオープン ソース リレーショナル...

MySQLトリガーの簡単な使用例

この記事では、例を使用して MySQL トリガーの簡単な使用方法を説明します。ご参考までに、詳細は以...

CSS3 画像の境界線を学ぶのに役立つ記事

CSS3 border-image プロパティを使用すると、要素の周囲に画像の境界線を設定できます。...

DockerのIDEA構成プロセス

IDEA は Java で最も一般的に使用されている開発ツールであり、Docker は最も人気のある...

MySQLのさまざまなロックの概念的理解

楽観的ロック楽観的ロックは、主にデータ バージョン記録メカニズムに基づいて実装され、通常はデータベー...

MySQL の異常なエラー ERROR: 2002 を解決する方法

最近、MySQL の起動中にエラーが発生しました。エラー メッセージは次のとおりです。 エラー 20...

少なくともn日間連続してログインしているユーザーに対するSQLクエリ

MySQL ツールを使用して、3 日間連続する例を見てみましょう。 1. SQL テーブルを作成しま...

JavaScript関数の使い方の詳細な説明

目次1. 関数を宣言する2. 関数の呼び出し3. 関数パラメータ4. 関数の戻り値5. 議論の使用6...

yum の基本的な使い方と例(推奨)

yumコマンドYum (フルネームは Yellow dog Updater, Modified) ...

HTMLフォームのいくつかの送信方法の概要

最も一般的で、最もよく使用され、最も一般的な方法は、submit タイプを使用することです。コードを...

MySQL GRANT ユーザー認証の実装

承認とは、ユーザーに特定の権限を付与することです。たとえば、新しく作成したユーザーに、すべてのデータ...

VueにおけるAxios非同期通信の詳細な説明

1. まず、インタラクティブに使用するための .json ファイルを作成します。json データ形式...

MySQLデータベースは何をするのか

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

win10 64 ビット システムに複数の JDK バージョンをインストールする際の切り替え問題と解決策の概要

コンピューターにmyeclipse2017とidea2017がインストールされているため、ideaが...