Javascript を使用して、スライドバー効果のあるスライドナビゲーション プラグインを開発します。

Javascript を使用して、スライドバー効果のあるスライドナビゲーション プラグインを開発します。

この記事では、純粋な Javascript を使用してシンプルな JS プラグインを開発する方法を紹介します。このプラグインを使用すると、マウスをナビゲーション上に置くと、下のスライダーが現在のメニューから選択したメニューに自動的にスライドするようにすることができます。

このプロジェクトのソースコードは GitHub でホストされています。星をクリックしてください:

https://github.com/dosboy0716/sliding-nav

1. はじめに

効果は以下のとおりです。

2. 使用方法

このプラグインをプロジェクトで使用するには、次の 3 つの手順のみが必要です。

1. </body>タグの終わりの前に、sliding-nav.jsファイルを参照します。

2. スライダーが必要なメニューコンテナにクラス名sliding-navを追加し、現在の項目はクラス名activeを使用します。

3. 属性を使用して外観を決定します: sn-color="color" sn-radius="roundness" sn-height="height"

<script src="/path/to/sliding-nav.js"></script>
<ul class="nav スライド ナビ" sn-color="#F00" sn-radius="0px" sn-height="3px">
 <li class="active">メニュー項目 1</li>
 <li>メニュー項目 2</li>
 <li>メニュー項目 3</li>
<ul>

3. 開発プロセス

1. モデル例

ナビゲーションメニューは、一般的に上図のような階層構造になっています。外側のコンテナには <ul> タグ、メニュー項目には <li> タグを使用します。小さな黄色の横棒を表示したい場合は、その配置が重要です。

分析の結果、小さな水平バーは視覚的には UL 内に配置されていますが、元のナビゲーション スタイルを破壊しないようにするには、小さな黄色のバーは絶対配置を使用し、その初期位置は ul タグと同じにする必要があります。

したがって、上の小さな灰色の点に示すように、小さな水平バーを <ul> タグの前に挿入します。これが小さな水平バーの初期位置、つまり (left=0、top=0) です。

では、バーをメニュー項目の真下に表示するにはどうすればよいでしょうか?

  • 小さなバーの top プロパティをメニュー項目の高さ (つまり offsetHeight プロパティ) に割り当てます。
  • 小さなバーの左プロパティをメニュー項目の左余白に割り当てます(つまり、offsetLeftプロパティ)。

上記の機能を実装するには、次のコードを使用できます。

関数init() {
 
 var navs = document.getElementsByClassName('sliding-nav');
 
 (var i = 0; i < navs.length; i++) の場合 {
 
 
  //現在のナビゲーションと垂直に揃える DIV を作成します var indi = document.createElement("div");
  indi.id = "slna-indicator"
 
  indi.style.borderRadius = navs[i].getAttribute("sn-radius") || "0px"
  indi.style.height = navs[i].getAttribute("sn-height") || "3px"
  indi.style.backgroundColor = navs[i].getAttribute("sn-color") || "#F00"
 
  indi.style.position = "絶対"
  indi.style.transition = "0.5秒"
 
  //現在のサブメニュー項目を検索します。クラス名が active または selected の場合、それが現在の項目とみなされます。そうでない場合は、最初の項目を使用します var selected = navs[i].getElementsByClassName('active')
  選択された長さが 0 の場合
   選択された = navs[i].getElementsByClassName('選択された')
  }
  選択された長さが 0 の場合
   選択された = navs[i].children
  }
 
  選択された長さが 0 の場合
   throw Error('申し訳ありませんが、ナビゲーション バーには項目がまったくありません。');
  }
 
  選択された = 選択された[0];
 
  indi.style.width = selected.offsetWidth + "px";
  indi.style.top = selected.offsetHeight + "px";
  indi.style.left = selected.offsetLeft + "px";
  navs[i].parentElement.insertBefore(indi, navs[i]);
 
  // 未完成。イベントをバインドするには以下のコードを挿入します}
 
}

上記のコードは、次の初期化関数 init() を構築します。

クラス名が slide-nav であるすべてのタグを検索し、上記の方法に従って、前に div タグを挿入して「インジケーター バー」として機能させ、「アクティブ」メニュー項目を検索します。検索後、このメニュー項目のさまざまなプロパティを使用して「インジケーター バー」を配置します。

2. イベントとアニメーション

「インジケーター バー」div タグの transition プロパティを 0.5 秒に設定しているので、次のようにイベント内で div を直接設定するだけです。

  • 左属性は「インジケーターバー」の動きを実現できます
  • width属性は「インジケータバー」の幅を設定できます。

したがって、上記のコードの最後に次のコードを挿入して、イベントとアニメーションを実装できます。

(var j = 0; j < navs[i].children.length; j++) {

   ホバー(navs[i].children[j], 関数(e, elem) {

    indi.style.width = elem.offsetWidth + "px";
    indi.style.left = elem.offsetLeft + "px";

   });

   //ナビゲーションから移動するときにデフォルト値を復元しますhover(navs[i], null, function(e, elem) {
    indi.style.width = selected.offsetWidth + "px";
    indi.style.left = selected.offsetLeft + "px";
   });

  }

このコードでは、ホバー イベントの実装に似たカスタム関数 hover を使用しています。JS には、ネイティブでは mouseover イベントと mouseout イベントしかありません。

この機能は、マウスインおよびマウスアウトイベントを DOM 要素にバインドします。具体的な実装プロセスについては、作者のオリジナルコードを参照してください。

4. すべてのオリジナルコード

この記事で実装したすべてのオリジナルコードは次のとおりです。読者の皆様がより最適化された提案をして、一緒により美しいフロントエンドエクスペリエンスを作り上げられることを願っています。

(var j = 0; j < navs[i].children.length; j++) {

   ホバー(navs[i].children[j], 関数(e, elem) {

    indi.style.width = elem.offsetWidth + "px";
    indi.style.left = elem.offsetLeft + "px";

   });

   //ナビゲーションから移動するときにデフォルト値を復元しますhover(navs[i], null, function(e, elem) {
    indi.style.width = selected.offsetWidth + "px";
    indi.style.left = selected.offsetLeft + "px";
   });

  }

これで、Javascript を使用してスライダー効果のあるスライドナビゲーション プラグインを開発する方法についての記事は終了です。スライドナビゲーション バー プラグインの js 開発に関するその他の関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • スライダーを作成するためのネイティブ js ドラッグ アンド ドロップ機能のサンプル コード
  • 水平画面と垂直画面を判断し、ブラウザのスライドバーを禁止するjsの例
  • jsは水平および垂直スライダーを実現します

<<:  nginx を使用したプロキシ サーバーの設定

>>:  Linux 構成で MySQL データベースへのリモート接続が失敗する問題の解決方法

推薦する

CSS 配置レイアウト (位置、配置レイアウト スキル)

1. ポジショニングとは何ですか? CSS の position 属性には、absolute/re...

JavaScript で同時実行制御を実装する方法

目次1. 同時実行制御の概要1.1 フェーズ1 1.2 フェーズ2 1.3 フェーズ3 2. 同時実...

特定の部門 ID に基づいて、すべての下位レベルの複数レベルのサブ部門を照会する MySQL の例

シミュレーションテーブルとデータスクリプト次の SQL ステートメントをコピーして、sys_dept...

VMware10 での CentOS 7 のインストールと設定のチュートリアル

Ubuntu が今日のデスクトップ ユーザーの間で最も人気のある Linux オペレーティング シス...

mysql indexof関数の使用手順

以下のように表示されます。 LOCATE(部分文字列、文字列)文字列 str 内の部分文字列 sub...

Linux での Centos7 ファイアウォールの基本的な使用方法の詳細な説明

1. ファイアウォールの基本的な使い方起動する: systemctl は、firewalld を起動...

VMware vSphere6.0 サーバー仮想化の展開とインストールの図 (詳細な手順)

1. VMware vSphere 導入の早期計画のポイント1. vSphereの利点(わずかに)...

HTML の表の行と列を結合する問題の解決策の詳細な説明

私たちが構築しようとしていたウェブサイトには、長い文章だけでなく、多数の表も含まれており、表のレイア...

Linux CentOS でスケジュールされたバックアップ タスクを設定する方法

実装準備 # ファイルパスをバックアップする必要があります: /opt/apollo/logs/ac...

Centos7のホスト名を変更する3つの方法

方法 1: hostnamectl の変更ステップ1 ホスト名を確認するホスト名ステップ2 ホスト名...

MySQL 5.7を完全にアンインストールするための詳細な手順

この記事は主に、MySQLを再インストールする際のクリーンでないアンインストールのさまざまな問題をま...

Elementのメッセージポップアップウィンドウが繰り返しポップアップする問題の解決

目次1. 使用2. メッセージポップアップウィンドウが繰り返し表示される問題を解決する1. 使用Vu...

Docker で hyperf を開発する完全な使用例の詳細な説明

ハイパーフ公式サイトHyperf 公式ドキュメントのインストール1. Dockerの使用docker...

Linuxの運用・保守の基礎知識から上級者向け知識までをまとめました

運用保守エンジニアは、初期段階では非常に大変な仕事です。この期間中、コンピューターの修理、ネットワー...

Centos7 で mysqldump を使用して MySQL データベースの毎日の自動バックアップを作成する

1. 要件:データベースのバックアップは、実稼働環境にとって特に重要です。データベースのバックアップ...