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 データベースへのリモート接続が失敗する問題の解決方法

推薦する

Windows ホストと Docker コンテナに共有フォルダを設定してマウントする手順

Docker コンテナ内のプログラムは、ホスト ディレクトリ内のデータにアクセスして呼び出す必要があ...

Mysql5.7 で JSON 操作関数を使用する手順

序文JSON は、言語に依存しないテキスト形式を使用する軽量のデータ交換形式で、XML に似ています...

CSS でインラインブロック要素間のギャップを削除するいくつかの方法の詳細な説明

最近、モバイルページを制作する際には、レイアウトにインラインブロック要素がよく使われますが、インライ...

最も完全なpackage.json分析

目次1. 概要2. 名前フィールド3. バージョンフィールド4. 説明フィールド5. キーワードフィ...

MySQL DML ステートメントの概要

DML 操作とは、データベース内のテーブル レコードに対する操作を指し、主にテーブル レコードの挿入...

nginx がアップストリーム アドレスにジャンプしない問題の解決方法

序文今日、nginx で非常に奇妙な問題に遭遇しました。フロントエンドの tomcat がページにジ...

Linux ブートシステム方式の分析

この記事では、Linux システムを起動する方法について説明します。ご参考までに、詳細は以下の通りで...

フォームのデフォルトの送信方法を変更する方法

htmlのデフォルトの送信方法は、postではなくgetです。postに変更したい場合は、 meth...

MySQL 更新セットとの違い

目次問題の説明原因分析解決問題の説明最近、奇妙な問い合わせを受けました。更新ステートメントはエラーな...

LinuxのバックグラウンドでPythonプログラムを実行するいくつかの方法

1. 最初の方法は、unhup コマンドを直接使用してプログラムをバックグラウンドで実行することです...

Mysql の遅いクエリ操作の概要

MySQL の遅いクエリの説明MySQL スロー クエリ ログは、MySQL が提供するログ レコー...

よく使われる HTML 形式のタグ_Powernode Java Academy

1. タイトルHTML では、<h1></h1> から <h6>...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

毎回インストールチュートリアルを探すのは面倒なので、後で確認できるように手順をバックアップします。解...

Vue で lodop 印刷コントロールを使用してブラウザ互換の印刷を実現する方法

序文このコントロールを直接印刷すると下部に透かしが入りますが、公式 Web サイトから購入することで...

ZabbixはPSK共有キーを使用してサーバーとエージェント間の通信を暗号化します。

Zabbix バージョン 3.0 以降、Zabbix サーバー、Zabbix プロキシ、Zabbi...