目次
1.ハンバーガーメニューの切り替えの反応実装
2。ハンドルスクロールイベント:ナビゲーションバーの吸着効果を実現します
3.予防策とパフォーマンスの最適化
要約します
ホームページ ウェブフロントエンド htmlチュートリアル jQueryナビゲーションロジックを反応に変換します:レスポンシブメニューを実装し、吸着効果をスクロールする

jQueryナビゲーションロジックを反応に変換します:レスポンシブメニューを実装し、吸着効果をスクロールする

Sep 27, 2025 pm 10:54 PM

jQueryナビゲーションロジックを反応に変換します:レスポンシブメニューを実装し、吸着効果をスクロールする

この記事では、Reactフレームワークに従来のjQueryナビゲーションバーの相互作用ロジック(ハンバーガーメニューの切り替えと吸着効果のスクロールを含む)を移行する方法に関する詳細なガイダンスを提供します。 ReactのUseStateおよび使用Effectフックを活用することにより、コンポーネントの状態およびDOM操作を効率的に管理する方法を示し、それにより、応答性とパフォーマンスが最適化されたナビゲーション機能を実現し、DOMの直接操作を回避し、コードメンテナビリティを改善します。

現代のWeb開発では、JQueryなどの命令的なJavaScriptライブラリからReactなどの宣言的なフレームワークに移行することは一般的な要件です。これにより、アプリケーションのパフォーマンスと保守性が向上するだけでなく、コンポーネント開発のパラダイムにより適応します。このチュートリアルでは、jQueryのコードロジックを変換してハンバーガーメニューの切り替えと吸着効果のスクロールを反応成分の実装に処理する方法を詳細に説明する例として、共通のナビゲーションバー機能を概説します。

1.ハンバーガーメニューの切り替えの反応実装

オリジナルのjQueryコードは、.navtriggerのクリックイベントに耳を傾け、toggleclassを使用して.navtriggerと#mainlistdivのクラス名を切り替えて、メニューを表示/隠し、アイコンスタイルを変更する目的を達成します。 Reactでは、コンポーネントの内部状態を管理することにより、この効果を達成する必要があります。

1。JQUERYオリジナルロジックレビュー

$('。Navtrigger ')。クリック(function(){
    $(this).toggleclass( 'Active');
    $( "#mainlistdiv")。toggleclass( "show_list");
    $( "#mainlistdiv")。fadein(); //ここのフェデインは通常、CSSアニメーションを通じて実装されます});

2。状態管理の実装を反応します

Reactでは、UseStateフックを使用して、メニューのオン/オフ状態を制御する状態変数を宣言します。ユーザーがハンバーガーメニューアイコンをクリックすると、この状態変数を更新し、状態変数の値に従ってCSSクラスを動的に追加または削除します。

 「React」からReact、{UseState}をインポートします。
Import './Navbar.css'; // cssファイルがインポートされていることを確認してくださいconst navbar =()=> {
  //状態変数を定義して、メニューが拡張されているかどうかを制御します[ismenuopen、setismenuopen] = uesestate(false);

  //クリックイベントの処理関数を定義するconst togglemenu =()=> {
    Setismenuopen(!ismenuopen); //メニューの拡張ステータスを切り替えます};

  戻る (
    <div classname="header">
      <nav classname="nav"> {/* affixクラスは次のセクションで処理されます*/}
        <div classname="container">
          <div classname="logo">
            <a href="%EF%BC%83">あなたのロゴ</a>
          </div>
          {/* IsMenuopenステータスに従って、 'show_list' class*/}を動的に追加します
          <div id="mainlistdiv" classname="{`main_list">
            <ul classname="navlinks">
              <li> <a href="%EF%BC%83"> bout </a> </li>
              <li> <a href="%EF%BC%83">ポートフォリオ</a> </li>
              <li> <a href="%EF%BC%83">サービス</a> </li>
              <li> <a href="%EF%BC%83">連絡先</a> </li>
            </ul>
          </div>
          {/* IsMenuopenステータスに従って、「アクティブ」クラスを動的に追加します*/}
          <span classname="{`navtrigger" onclick="{togglemenu}">
            <i> </i>
            <i> </i>
            <i> </i>
          </span>
        </div>
      </nav>
    </div>
  );
};

デフォルトNavbarをエクスポートします。

キーポイント:

  • UseState(false) :IsMenuopenステータスをFalseに初期化します。つまり、メニューはデフォルトで閉じられています。
  • Togglemenu関数:Navtriggerをクリックするたびに、Ismenuopen状態が逆になります。
  • 条件付きクラス名:JSXでは、テンプレート文字列と3成分演算子を使用して、イスメヌーペンの状態に基づいて要素のCSSクラスを動的に追加または削除します。たとえば、classname = {navtrigger $ {ismenuopen? 「Active」: ""}}は、Ismenuopenが真実であるときにアクティブクラスを追加します。
  • フェデイン効果:jQueryのフェデイン()は、通常、ディスプレイまたは視認性の特性と組み合わせたCSSの不透明度と遷移特性を切り替えることで実現されます。 show_listクラスが追加されると、CSSは対応する遷移アニメーションを定義する必要があります。

2。ハンドルスクロールイベント:ナビゲーションバーの吸着効果を実現します

jQueryは、ウィンドウのスクロールイベントを聞くことで巻物の位置を判断し、条件に応じて接辞クラスを追加または削除します。 Reactでは、Effectフックを使用して、イベントリスナーの追加や削除など、このような副作用に対処します。

1。JQUERYオリジナルロジックレビュー

$(window).scroll(function(){
    if($(document).scrolltop()> 50){
        $( '。nav')。addclass( 'affix');
    } それ以外 {
        $('。NAV ')。REMOVECLASS(' Affix ');
    }
});

2。EFFECTの実装を使用します

コンポーネントがマウントされたときにスクロールイベントリスナーを追加して、コンポーネントがアンインストールされているときにそれを削除するために、Useefectフックを使用する必要があります。

 Reactをインポート、{useState、useefcect} from 'React';
Import './Navbar.css';

const navbar =()=> {
  const [ismenuopen、setismenuopen] = uesestate(false);
  //ナビゲーションバーが吸着されているかどうかを制御するために状態変数を定義します[isaffixed、setisaffixed] = uesestate(false);

  const togglemenu =()=> {
    Setismenuopen(!ismenuopen);
  };

  // useeffectを使用してスクロールイベントリスナーを管理するeffect(()=> {
    const handlescroll =()=> {
      //スクロール位置が50pxを超えるかどうかを判断します
      if(window.scrolly> 50){
        setisaffixed(true); //吸着状態に設定} else {
        setisaffixed(false); //吸着状態を削除}
    };

    //コンポーネントがWindow.AddeventListener( 'Scroll'、handlescroll)をマウントしたときにスクロールイベントリスナーを追加します。

    // component unroling returns()=> {componentを削除するためにクリーンアップ関数を返してイベントリスナーを削除します
      window.removeeventlistener( 'scroll'、handlescroll);
    };
  }、[]); //空の配列は依存関係として使用され、コンポーネントがマウントされてアンインストールされた場合にのみ返品が実行されることを示します(
    <div classname="header">
      {/* ISAFFIXEDステータスに従って、「Affix」クラスを動的に追加します*/}
      <nav classname="{`nav">
        <div classname="container">
          <div classname="logo">
            <a href="%EF%BC%83">あなたのロゴ</a>
          </div>
          <div id="mainlistdiv" classname="{`main_list">
            <ul classname="navlinks">
              <li> <a href="%EF%BC%83"> bout </a> </li>
              <li> <a href="%EF%BC%83">ポートフォリオ</a> </li>
              <li> <a href="%EF%BC%83">サービス</a> </li>
              <li> <a href="%EF%BC%83">連絡先</a> </li>
            </ul>
          </div>
          <span classname="{`navtrigger" onclick="{togglemenu}">
            <i> </i>
            <i> </i>
            <i> </i>
          </span>
        </div>
      </nav>
    </div>
  );
};

デフォルトNavbarをエクスポートします。

キーポイント:

  • UseEffect :コンポーネントの副作用を扱うために使用されます。ここで、副作用は、グローバルなスクロールイベントリスナーを追加および削除することです。
  • 依存関係配列[] :useefectの2番目のパラメーターが空の配列である場合、使用効果のコールバック関数は、コンポーネントがマウントされたときに1回だけ実行され、コンポーネントがアンロードされたときに返されるクリーンアップ関数は1回実行されます。これにより、イベントリスナーが適切に追加および削除され、メモリリークが回避されます。
  • window.scrolly :現在のページの垂直スクロール位置を取得するために使用されます。 document.documentelement.scrolltopは、ブラウザの互換性に応じて同じ目的を達成することもできますが、window.scrollyはよりモダンです。
  • ISAFFIXEDステータス:NAV要素に接辞クラスがあるかどうかを制御します。

3.予防策とパフォーマンスの最適化

  1. CSSはCoreです。CSSクラス名を動的に追加/削除するのにのみ責任があります。すべての視覚効果(ハンバーガーメニューアイコンのX字型変換、メニュー拡張アニメーション、ナビゲーションバーの背景色の変更など)をCSSファイルで定義する必要があります。 CSSファイルがCodePenのスタイルと一致していることを確認し、Active、Show_list、Affixなどのクラス名のスタイルを正しく処理します。

  2. 直接DOM操作を避けてください:Reactはuserefを提供してDOM要素を直接アクセスしますが、コンポーネント状態を管理し、ReactがDOMを宣言的に更新させることをお勧めします。このチュートリアルの方法は、クラスリストを直接操作するのではなく、状態を介してクラス名を制御することにより、この原則に従います。

  3. スクロールイベントのパフォーマンスの最適化:スクロールイベントは、短期間で複数回トリガーされる可能性があり、ステータスの頻繁な更新はパフォーマンスの問題を引き起こす可能性があります。高頻度でトリガーされたイベント(スクロール、サイズ変更など)の場合、イベント処理機能の実行頻度を制限するために、スロットリングまたは吹き飛ばす手法を使用することをお勧めします。

    • スロットリング:一定期間以内に関数を1回だけ実行します。
    • 討ち:イベントが一定期間トリガーを停止した後、関数は実行されます。

    これは、ハンドルクロール関数に統合できる簡単なスロットリングの実装の例です。

     reactをインポート、{useState、useefect、useref、usecallback} from 'React';
    Import './Navbar.css';
    
    const navbar =()=> {
      const [ismenuopen、setismenuopen] = uesestate(false);
      const [isaffixed、setisaffixed] = uesestate(false);
    
      const togglemenu =()=> {
        Setismenuopen(!ismenuopen);
      };
    
      //スロットリング関数const throttle =(func、delay)=> {
        インスロットルしましょう。
        return function(){
          const args = arguments;
          const context = this;
          if(!inthrottle){
            func.apply(context、args);
            inthrottle = true;
            setimeout(()=>(inthrottle = false)、遅延);
          }
        };
      };
    
      // usecallbackを使用してハンドルクロールを避け、constハンドルクロールをレンダリングするたびにconst handlescroll = usecallback(
        スロットル(()=> {
          if(window.scrolly> 50){
            setisaffixed(true);
          } それ以外 {
            setisaffixed(false);
          }
        }、100)、// 100ミリ秒ごとに最大1回実行[]
      );
    
      effect(()=> {
        window.addeventlistener( 'scroll'、handlescroll);
        return()=> {
          window.removeeventlistener( 'scroll'、handlescroll);
        };
      }、[handlescroll]); //ハンドルクロールに依存します
    
      戻る (
        <div classname="header">
          <nav classname="{`nav">
            <div classname="container">
              <div classname="logo">
                <a href="%EF%BC%83">あなたのロゴ</a>
              </div>
              <div id="mainlistdiv" classname="{`main_list">
                <ul classname="navlinks">
                  <li> <a href="%EF%BC%83"> bout </a> </li>
                  <li> <a href="%EF%BC%83">ポートフォリオ</a> </li>
                  <li> <a href="%EF%BC%83">サービス</a> </li>
                  <li> <a href="%EF%BC%83">連絡先</a> </li>
                </ul>
              </div>
              <span classname="{`navtrigger" onclick="{togglemenu}">
                <i> </i>
                <i> </i>
                <i> </i>
              </span>
            </div>
          </nav>
        </div>
      );
    };
    
    デフォルトNavbarをエクスポートします。

    上記のコードでは、単純なスロットル関数を導入し、USeCallbackを使用してハンドルクロールをラップして、ハンドルクロールがコンポーネントの寿命を通じて安定したままであることを確認し、使用効率の不必要な再解決を回避します。

要約します

このチュートリアルを通して、従来のjQueryナビゲーションバーの相互作用ロジック(ハンバーガーメニューの切り替えと吸着効果のスクロールを含む)をReactフレームワークに移行する方法を学びました。コアは、ReactのUseState Hookを使用してコンポーネントの状態を管理し、Effectフックを介して副作用(イベントリスナーなど)を処理することです。また、DOMの直接操作を避けるためにReactの宣言的なプログラミングパラダイムをフォローします。この変換により、コードがより読みやすく保守可能になるだけでなく、高性能反応アプリケーションを構築するための基盤を置きます。 CSSはこれらの視覚効果を達成するための鍵であり、Reactはアプリケーション状態に基づいて正しいCSSクラスを動的に適用する責任があることを忘れないでください。

以上がjQueryナビゲーションロジックを反応に変換します:レスポンシブメニューを実装し、吸着効果をスクロールするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

CSSのヒント:親要素に影響を与えることなく、特定のテキストコンテンツを正確に非表示にする CSSのヒント:親要素に影響を与えることなく、特定のテキストコンテンツを正確に非表示にする Sep 16, 2025 pm 10:54 PM

このチュートリアルは、CSSを使用してHTMLページの特定のテキストコンテンツを正確に非表示にする方法を詳しく説明し、不適切なセレクターのために親要素全体が非表示になっているという問題を回避します。ターゲットテキストのラッピング要素に排他的なCSSクラスを追加し、ディスプレイを使用して以下を使用します。属性、開発者はページ要素の洗練された制御を実現し、必要な部品のみが隠されていることを確認し、それによりページレイアウトとユーザーエクスペリエンスを最適化します。

HTMLのメールアドレスへのハイパーリンクを作成する方法は? HTMLのメールアドレスへのハイパーリンクを作成する方法は? Sep 16, 2025 am 02:24 AM

usemailto:inhreftocreateemaillinks.startwithforbasiclinks、add?subject = and&body = forpre-fillcontent、およびincludemultipreaddresseSorcc =、bcc = foradvencedoptions。

クロスドメインのiframesを含む親要素を含むムーズダウンイベントをキャプチャ:原則と制限 クロスドメインのiframesを含む親要素を含むムーズダウンイベントをキャプチャ:原則と制限 Sep 20, 2025 pm 11:00 PM

この記事では、クロスドメインのiframesを含む親divでムースタウンイベントをキャプチャするという課題について説明します。中心的な問題は、ブラウザのセキュリティポリシー(同じオリジンポリシー)が、ドメインクロスIFRAMEコンテンツでの直接DOMイベントリスニングを防ぐことです。このタイプのイベントキャプチャは、IFRAMEソースドメイン名が制御され、CORSが構成されていない限り、実現できません。この記事では、これらのセキュリティメカニズムを詳細に説明し、イベントインタラクションに関する制限を説明し、可能な代替案を提供します。

JavaScript外部関数コール難易度分析:スクリプトの場所と命名仕様 JavaScript外部関数コール難易度分析:スクリプトの場所と命名仕様 Sep 20, 2025 pm 10:09 PM

この記事では、HTMLで外部JavaScript関数を呼び出す際の2つの一般的な問題を調査します。スクリプトの読み込み時間が不適切になり、DOM要素が準備ができていません。また、関数の命名は、ブラウザの組み込みイベントまたはキーワードと競合する場合があります。この記事では、スクリプト参照位置の調整や、JavaScriptコードが正しく実行されることを確認するための優れた関数の命名仕様に従って、詳細なソリューションを提供します。

HTMLのホバーにツールチップを追加する方法は? HTMLのホバーにツールチップを追加する方法は? Sep 18, 2025 am 01:16 AM

UsethetitLeattributeForsimpletOultipsOrcsSorcustom-styledones.1.addtitle = "text" to nayelementfordefaultTooltips.2.forStyledTooltips、wraptheelementinAcontainer、use.tooltipand.tooltiptextextextexcscstioning、pseudo-spositing、andsoditioning、andvisctioning

HTMLの画像をテキストラップする方法は? HTMLの画像をテキストラップする方法は? Sep 21, 2025 am 04:02 AM

USECSSFLOATPROPERTYTOWRAPTEXTARONDANIMAGE:floatleftortextontontheright、floatrightextontontheleft、addmarginforspacing、およびclearfloatstopreventlayoutissues。

Lang属性をHTMLに設定する方法 Lang属性をHTMLに設定する方法 Sep 21, 2025 am 02:34 AM

setthelangattributionthehtmltagtospecifypagelanangage、たとえば、たとえば、forenglish;

ブートストラップフレックスボックスレイアウトに要素の垂直スタッキングを実装する:側面からレイヤー ブートストラップフレックスボックスレイアウトに要素の垂直スタッキングを実装する:側面からレイヤー Sep 21, 2025 pm 10:42 PM

WebページレイアウトにBootstrapを使用する場合、開発者は、特に親コンテナがFlexBoxレイアウトを適用する場合、デフォルトで垂直に積み重ねられたものではなく、並べ替えられる要素の問題に遭遇することがよくあります。この記事では、この共通のレイアウトチャレンジを詳細に調べて解決策を提供します。BootstrapのFlex-Column Toolクラスを使用して、Flex-Direction属性を列に調整して、フォームなどのH1タグとコンテンツブロックの正しい垂直方向の配置を実現し、ページ構造が期待を満たすことを保証します。

See all articles