展開アニメーション効果のあるナビゲーションバーを設計してカスタマイズし、デモを作成してみました。設計とデバッグを完了するのにほぼ 1 日かかりました。 HTML はレイアウトの記述に使用され、CSS はスタイルの記述に使用され、JS はアニメーション効果やイベント応答の記述などに使用されます。DOM 操作における JQuery の利便性を考慮すると、ここで JQuery を使用することを選択すると、半分の労力で 2 倍の結果を達成できます。 デザイン:ダウンロードしたナビゲーション バー プラグインの一部が単調すぎると感じた場合は、好みのナビゲーション バーをデザインしてください。まず、一枚の紙を用意して、どのようなナビゲーションを希望し、最終的にどのような効果を実現したいかを描きます。 書き込みレイアウト:考えを整理したら、HTML を書き始めます。これは比較的簡単なステップです。一般的には、<div> <span> <a> のタグで十分です。上下関係を明確に記述することが重要です。 いくつかのポイントを述べます: <div>はブロックレベルの要素です。つまり、その内容は自動的に新しい行で始まります。 書き方:このスタイルはゆっくりとデバッグする必要があり、忍耐が必要です。色の組み合わせについては、いくつかの古典的な配色を参照することができます。下の各ノードを水平方向に引き伸ばす必要があるため、複数列レイアウトに似た効果が必要になります。<span> タグと <div> タグは、オブジェクトをインライン オブジェクトとしてレンダリングするためにdisplay:inline-blockでスタイル設定されていますが、オブジェクトのコンテンツはブロック オブジェクトとしてレンダリングされます。簡単に言えば、1 行を強制的に占有せずに幅と高さを設定することです。優れた CSS3 レイアウト属性display:flexを使用して、複数列レイアウトを実現することもできます。 JS を記述します:レイアウトが記述されたら、機能を実装する必要があります。前述したように、ナビゲーション バーを使用すると、各章の上にマウスを移動して、その下の各ノードを水平に広げることができます。当然、ホバーイベントが使用されます。jQuery のホバーイベントを見てみましょう。 $(セレクタ).hover(inFunction,outFunction) 括弧内の最初の関数は必須であり、マウスオーバー イベントが発生したときに実行される関数を指定します。 jQuery ではアニメーション効果も簡単に実装できます。animate ()メソッドは、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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL 8.0.17 winx64 (Navicat 付き) 手動構成バージョンのインストール チュートリアル図
>>: CentOS 6-7 PHPのyumインストール方法(推奨)
Docker はコンテナに相当し、必要な動作環境に応じて対応する動作環境を構築できます。このとき、各...
目次序文1. 少ない2. コンポーネントをインポートする3. 設定ファイルを変更するステップ1: l...
Portainer は、Docker ホストと Docker Swarm クラスターの管理に使用でき...
1. カラーマッチング効果のプレビュー下の GIF に示すように、ボタンの背景色が徐々に薄くなると...
mysql-5.7.17-winx64 は MySQL の最新バージョンです。インストールは無料で...
目次マインドマップシンプルな理解インデックスモデルの進化二分探索木自己バランス型二分木BツリーB+ ...
目次1. 複数ページの違い2. SPAとMPA 3. Vue Cli スキャフォールディング構成1....
目次HTTP ハイジャック、DNS ハイジャック、XSS HTTPハイジャックDNSハイジャックXS...
この記事では、参考までに、計算機のWebバージョンを実装するためのJavaScriptの具体的なコー...
目次1. 初期化構造2. 蛇の色のレンダリング3. ヘビの動き4. ヘビの死を判定する方法 ヘビの死...
目次単一ノード差分単一要素を調整するマルチノード差分調整子配列ノードが移動したかどうかを判断するには...
目次0. 背景1. インストール2. Baidu Cloudアカウントにログインする3. ファイルを...
具体的な方法:まずコマンドプロンプトを開きます。次に、[ mysql -u root -p ] コマ...
1.ブラウザに次のアドレスを入力します参考: 2. 次のインターフェースに入ります。下の場所をクリッ...
これは、ネイティブJSを使用してページングクリックコントロールを実装する必要がある面接の質問です。参...