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インストール方法(推奨)

推薦する

Linux サーバー上で nvidia-docker 環境を設定するプロセスの詳細な説明

Docker はコンテナに相当し、必要な動作環境に応じて対応する動作環境を構築できます。このとき、各...

Vue cli開発に基づく外部コンポーネントVantのデフォルトスタイルの変更の詳細な説明

目次序文1. 少ない2. コンポーネントをインポートする3. 設定ファイルを変更するステップ1: l...

portainer を使用してリモート docker に接続するチュートリアル

Portainer は、Docker ホストと Docker Swarm クラスターの管理に使用でき...

CSS 前景と背景の自動カラーマッチング技術の紹介 (デモ)

1. カラーマッチング効果のプレビュー下の GIF に示すように、ボタンの背景色が徐々に薄くなると...

MySQL 5.7.17 最新インストールチュートリアル(画像とテキスト付き)

mysql-5.7.17-winx64 は MySQL の最新バージョンです。インストールは無料で...

MySQLデータベースインデックスの詳細な紹介

目次マインドマップシンプルな理解インデックスモデルの進化二分探索木自己バランス型二分木BツリーB+ ...

Vue マルチページ構成の詳細

目次1. 複数ページの違い2. SPAとMPA 3. Vue Cli スキャフォールディング構成1....

フロントエンドセキュリティの詳細な説明: JavaScript の http ハイジャック対策と XSS

目次HTTP ハイジャック、DNS ハイジャック、XSS HTTPハイジャックDNSハイジャックXS...

ネイティブ JavaScript を使用した Web 計算機の実装

この記事では、参考までに、計算機のWebバージョンを実装するためのJavaScriptの具体的なコー...

JSはスネークゲームを実装する

目次1. 初期化構造2. 蛇の色のレンダリング3. ヘビの動き4. ヘビの死を判定する方法 ヘビの死...

React diffアルゴリズムソースコード分析

目次単一ノード差分単一要素を調整するマルチノード差分調整子配列ノードが移動したかどうかを判断するには...

Linux コマンドライン操作 Baidu クラウドのファイルのアップロードとダウンロード

目次0. 背景1. インストール2. Baidu Cloudアカウントにログインする3. ファイルを...

MySQL に接続されている IP アドレスを表示する方法の例

具体的な方法:まずコマンドプロンプトを開きます。次に、[ mysql -u root -p ] コマ...

MySQL 5.7 と Mac 上の MySql の詳細なインストール図をダウンロードする

1.ブラウザに次のアドレスを入力します参考: 2. 次のインターフェースに入ります。下の場所をクリッ...

ページングクリックコントロールを実装するネイティブJS

これは、ネイティブJSを使用してページングクリックコントロールを実装する必要がある面接の質問です。参...