jQuery は拡張アニメーションによるナビゲーション バー効果を実装します

jQuery は拡張アニメーションによるナビゲーション バー効果を実装します

展開アニメーション効果のあるナビゲーションバーを設計してカスタマイズし、デモを作成してみました。設計とデバッグを完了するのにほぼ 1 日かかりました。
ここでは、デザイン→レイアウトの記述→スタイルの記述→JS コードの記述まで、完全に自分でデザインしたナビゲーション バーを完成させる方法について説明します。

HTML はレイアウトの記述に使用され、CSS はスタイルの記述に使用され、JS はアニメーション効果やイベント応答の記述などに使用されます。DOM 操作における JQuery の利便性を考慮すると、ここで JQuery を使用することを選択すると、半分の労力で 2 倍の結果を達成できます。

デザイン:

ダウンロードしたナビゲーション バー プラグインの一部が単調すぎると感じた場合は、好みのナビゲーション バーをデザインしてください。まず、一枚の紙を用意して、どのようなナビゲーションを希望し、最終的にどのような効果を実現したいかを描きます。
例えば、ここにナビゲーション バーを記述する場合、各章の上にマウスを移動すると、その下にある各ノードが水平方向に引き伸ばされ、ノードがジャンプする動作で表示されます。

書き込みレイアウト:

考えを整理したら、HTML を書き始めます。これは比較的簡単なステップです。一般的には、<div> <span> <a> のタグで十分です。上下関係を明確に記述することが重要です。

いくつかのポイントを述べます:

<div>はブロックレベルの要素です。つまり、その内容は自動的に新しい行で始まります。
<span>タグはそれ自体では行を占有せず、通常はコンテンツを囲むために使用されます。ブロックレベル要素ではないため、幅と高さの属性を設定することは無効です。
<a>タグは、もちろんリンクを配置するために使用されます。

書き方:

このスタイルはゆっくりとデバッグする必要があり、忍耐が必要です。色の組み合わせについては、いくつかの古典的な配色を参照することができます。下の各ノードを水平方向に引き伸ばす必要があるため、複数列レイアウトに似た効果が必要になります。<span> タグと <div> タグは、オブジェクトをインライン オブジェクトとしてレンダリングするためにdisplay:inline-blockでスタイル設定されていますが、オブジェクトのコンテンツはブロック オブジェクトとしてレンダリングされます。簡単に言えば、1 行を強制的に占有せずに幅と高さを設定することです。優れた CSS3 レイアウト属性display:flexを使用して、複数列レイアウトを実現することもできます。

JS を記述します:

レイアウトが記述されたら、機能を実装する必要があります。前述したように、ナビゲーション バーを使用すると、各章の上にマウスを移動して、その下の各ノードを水平に広げることができます。当然、ホバーイベントが使用されます。jQuery のホバーイベントを見てみましょう。

$(セレクタ).hover(inFunction,outFunction)

括弧内の最初の関数は必須であり、マウスオーバー イベントが発生したときに実行される関数を指定します。
2 番目の関数はオプションであり、マウスアウト イベントが発生したときに実行される関数を指定します。

jQuery ではアニメーション効果も簡単に実装できます。animate ()メソッドは、CSS スタイルを通じて要素をある状態から別の状態に変更します。
CSS プロパティの値を段階的に変更することでアニメーション効果を作成できますが、ここでは詳しく説明しません。

ノードを順番に表示したいのですが、アニメーション キューイングは使用したくないので、コールバック関数を記述し、コールバック関数に setTimeout delay を記述し、addClass を使用して対応するノードにアニメーション スタイルを追加しました。

コード:

<!--CC により 2017/10/14 に作成-->
 
<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8">
    <title>~myNav~</title>
    <script type="text/javascript" src="jquery.js"></script>
    <!--スタイル-->
    <スタイル タイプ="text/css">
 
        .三角形右 {
            幅: 0;
            高さ: 0;
            左境界線: 20px 実線 #FF7800;
            border-bottom: 20px 透明の実線;
            border-top:2px 点線 #333333;
            表示: インラインブロック;
            上マージン:10px;
            垂直方向の位置合わせ: 上;
        }
        .mynav
        {
            フォント ファミリ: punctuation、"PingFangSC-Regular"、"Microsoft Yahei"、"sans-serif";
            -webkit-font-smoothing: サブピクセルアンチエイリアス;
            マージン:10px 2%;
            幅:90%;
            高さ:450px;
            ディスプレイ:フレックス;
        }
        .nav-left{
             flex:auto を設定します。
            高さ:200px;
            フォントサイズ:20px;
            フォントの太さ: 700;
            テキスト配置: 中央;
            背景色:#505050;
            色:#FF7800;
            右ボーダー:3px 実線 #FF7800;
            幅:80ピクセル;
            パディング上部:40px;
        }
        .nav-右
             flex:auto を設定します。
             幅:90%
        }
        .nav-right div{
            位置:相対;
        }
        。キャップ{
            表示:インラインブロック;
            幅:70px;
            高さ:30px;
            背景色: #FF7800;
            マージン:10px 0;
            border-bottom:2px 点線 #333333;
            border-top:2px 点線 #333333;
        }
 
        。子供{
            表示:インラインブロック;
            幅:0px;
            border-top:2px 点線 #333333;
            垂直方向の位置合わせ: 上;
            上マージン: 10px;
        }
        span.cap-child
        {
            位置:絶対;
            境界線:2px 実線 #333333;
            背景色: #505050;
            色: #ffffff;
            -webkit-border-radius: 8px;
            -moz-border-radius: 8px;
            境界線の半径: 8px;
            /*上:5px;*/
            左:0px;
 
        }
        span.cap-child{
            フォントサイズ:15px;
            色:白;
        }
        span.cap-child a:hover{
            色: #ffc8aa;
        }
        .hr-over{
            位置:絶対;
            -webkit-border-radius: 10px;
            -moz-border-radius: 10px;
            境界線の半径: 10px;
            背景色: #FF7800;
            幅:20px;
            高さ:20px;
            上マージン:-10px;
            境界線:1px 実線 #333333;
        }
        .showit{
            アニメーション: cho-show .5s;
        }
        @keyframes cho-show {
            0% {
                -webkit-transform-origin: 右下;
                transform-origin: 右下;
                -webkit-transform:rotate3d(0, 0, 1, 45度);
                変換: rotate3d(0, 0, 1, 45deg);
                不透明度:0;
            }
            100% {
                -webkit-transform-origin: 右下;
                transform-origin: 右下;
                -webkit-transform: なし;
                変換: なし;
                不透明度:1;
            }
        }
 
    </スタイル>
</head>
<本文>
<!--レイアウト-->
<div class="mynav">
    <div class="nav-left">
        コンテンツ
        <span style="font-size:6px">
            ccより
        </span>
    </div>
    <div class="nav-right">
        <div> 要素
            <span class="cap ">第1章</span><div class="triangle-right"></div>
            <div class="child">
            </div>
        </div>
        <div> 要素
            <span class="cap">第 2 章</span><div class="triangle-right"></div>
            <div class="child">
            </div>
        </div>
        <div> 要素
            <span class="cap">第3章</span><div class="triangle-right"></div>
            <div class="child">
            </div>
        </div>
    </div>
</div>
 
<script type="text/javascript">
    var アクティブ = '';
    var スペース = 80;
    var myNodes = [{ name:'Chapter1',
                    子: [{name:'キャラクターセット',url:'https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E9%9B%86/946585?fr=aladdin'},
                    {name:'コメント',url:'cc/sd1/index'},
                    {name:'直接数量',url:'cc/sd2/index'}
        ]},
        {name:'第2章',
        子:[{name:'number',url:'#'},
        {名前:'テキスト',url:'#'},
        {name:'ブール値',url:'#'},
        {name:'グローバルオブジェクト',url:'#'},
        {name:'パッケージオブジェクト',url:'#'}
        ]},
        {
            名前:'第3章',
            子: [{name:'Cat',url:'#'},
            {name:'狗',url:'#'}
        ]}
    ];
 
    $('.cap').hover(関数(){
        var cap = これ;
        var mybox=$(cap.parentNode).find('.child');
        if(アクティブ!=this.innerHTML)
        {
            //色を変更する$(cap).css('background-color','#ffc8aa');
            $(cap).next().css('左境界線の色','#ffc8aa');
            // 元のコンテンツをクリーンアップします for(var j=0;j<$('.child').length;j++)
            {
                //コンソール.log($('.child')[j]);
                $($('.child')[j]).empty();
                $($('.child')[j]).css('width','0px');
            }
 
            アクティブ=this.innerHTML;
            myNodes.forEach(関数(アイテム){
                    if(アクティブ==アイテム名)
                    {
                        myAnimate(item.children,mybox);
 
                    }
                }
            );
        }
         // 順序の表示 orderShow($(mybox),$(mybox).children().length-1);
 
    }、 関数(){
        //色を変更する$(this).css('background-color','#FF7800');
        $(this).next().css('左境界線の色','#FF7800');
 
    });
 
 
    関数 myAnimate(arr,ele)
    {
       // コンソールログ(ele);
        var $ele=$(ele);
        var 位置;
        arr.forEach(関数(項目,インデックス){
            位置=スペース*インデックス+20;
            addOne(アイテム、位置+'px');
        });
        $ele.animate({width:pos+100+'px'},200,'linear',function(){
            var left=pos+80+'px';
            $ele.append("<span class='hr-over' style='left:"+left+"'></span>");
        });
        関数 addOne(item,pos)
        {
            var mylink="<a href='"+item.url+"'>"+item.name+"</a>";
            $ele.append("<span class='cap-child' style='display:none;left:"+pos+"'>"+mylink+"</span>")
        }
    }
 
    関数 orderShow($it,times)
    {
        if(times>=0)
        {
            setTimeout(関数(){
                $($it.children()[times]).css('display','block')
                $($it.children()[times]).addClass('showit');
            orderShow($it,times-1)
        },100);
        }
        それ以外
            戻る;
 
    }
</スクリプト>
 
</本文>
</html>

効果:

ダイナミックエフェクト:

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

以下もご興味があるかもしれません:
  • シンプルな jQuery の左ナビゲーション バーとページ選択効果
  • JQuery フローティングナビゲーションバー実装コード
  • jQuery を使用したシンプルなナビゲーション バーの作成
  • JQueryが現在のページまたはジャンプ後のページのナビゲーションバーに選択したスタイルを追加する例
  • jQueryは、クリック後にナビゲーションバーのヘッダーメニュー項目の色を変更するメソッドを実装します。
  • jQueryは、マウスクリック後にリストコンテンツを展開するナビゲーションバー効果を実装します。
  • サイドナビゲーションバー効果を実現するためのjQuery+CSS
  • jQuery モバイルナビゲーションバーコード
  • jQueryはナビゲーションバーをクリックして、スタイルを変更するための実装コードを選択します。
  • jQueryは垂直および水平のメニューナビゲーションバーを実装します

<<:  MySQL 8.0.17 winx64 (Navicat 付き) 手動構成バージョンのインストール チュートリアル図

>>:  CentOS 6-7 PHPのyumインストール方法(推奨)

推薦する

nginxリバースプロキシのyum設定の詳細な手順

パート0 背景社内のイントラネットサーバーは直接インターネットにアクセスすることはできませんが、外部...

LeetCode の SQL 実装 (182. 重複するメールボックス)

[LeetCode] 182.重複メールPerson という名前のテーブル内のすべての重複メールを...

Dockerはホスト間のネットワーク通信を実現するためにMacvlanを導入する

基本的な概念: Macvlanの動作原理: Macvlan は、Linux カーネルでサポートされて...

Dockerとiptablesとブリッジモードのネットワーク分離と通信操作の実装

Docker は、ブリッジ、ホスト、オーバーレイなどの複数のネットワークを提供します。同じ Dock...

MySQL のフィールドにデフォルトの時間を追加する方法

日付型の違いと用途MySQL には、日付、時刻、年、日付時刻、タイムスタンプの 5 つの日付タイプが...

CocosCreatorでゲームコントローラーを使用する方法

目次1. シーンレイアウト2. ハンドルリスナーを追加する1. イベントの変更を監視する2. 座標設...

JSが5つ星の賞賛を獲得

この記事では、5つ星の評価を獲得するためのJSの具体的なコードを参考までに共有します。具体的な内容は...

位置固定オフセット問題を解決する方法の詳細な説明

質問CSS 固定配置の position:fixed は非常に使いやすいです。ブラウザのビューポート...

Vue は zip ファイルのダウンロードを実装します

この記事の例では、Vueの具体的なコードを共有し、zipファイルをダウンロードして参考にしています。...

MySQLのジョイントインデックス機能の分析と使用例

この記事では、例を使用して、MySQL 共同インデックスの機能と使用方法を説明します。ご参考までに、...

ノードイベントループにおけるイベント実行の順序

目次イベントループブラウザ環境イベントループノード環境イベントループ6つのステージ(1)setTim...

SQL インジェクション脆弱性プロセスの例と解決策

コード例: パブリッククラスJDBCDemo3 { パブリック静的voiddemo3_1(){ bo...

Jsonフォーマットの詳細な説明

目次JSON は次の 2 つの構造に基づいて構築されます。 2. JSON形式1. オブジェクト2....

Windows 10 Home Edition に Docker for Windows をインストールする

0. 背景ハードウェア: Xiaomi Notebook Air 13/Inter Core i7-...

ナビゲーションバーのドロップダウンメニューのサンプルコードを実装するためのHTML+CSS

効果コード内の画像は自分で変更できますドロップダウンメニューのHTMLコード <ヘッダークラ​...