_スムーススクロール_は、ボタンをクリックして(同じ) ページの別の箇所へジャンプさせる代わりに、スクロールアニメーションによって移動させる機能です。これはサイトの美観に差をつける繊細な機能です。
この記事では、npm 上でreact-scroll
パッケージを使用して、スムーズなスクロールを実装します。
このチュートリアルを完了するには、次のものが必要です。
このチュートリアルは、Node v13.14.0、npm v6.14.5、 react
v16.13.1、react-scroll
v.1.7.16 で検証済です。
react-scroll
を使用するこのチュートリアルでは簡単なアプリを作成しますが、react-scroll
機能の概要を手軽に知りたいなら、この要約版を参照してください。
react-scroll
をインストールします。
react-scroll
パッケージをインポートします。
リンクコンポーネントを追加します。<Link />
コンポーネントは、アプリの任意の領域をポイントします。
さらに踏み込んで、スムーススクロール付きのReact アプリを作成しましょう。
便宜上、チュートリアルでは、上部にナビゲーションバー(navbar)と5つのセクションに別れたコンテンツがあるstarter React project(Create React App 2.0を使用)を使用します。
navbar のリンクは、この時点でアンカータグだけですが、スムーススクロールが有効になるようにまもなく更新します。
プロジェクトはReact With Smooth Scrollingにあります。リンクがstartbranch 向けであることに注意してください。master branchには完成したプロジェクトすべてがあります。
プロジェクトを複製するには、次のコマンドを使用します。
src/Components
ディレクトリを調べると、Navbar.js
ファイルがあります。このファイルの<Navbar>
には、5つの<Section>
それぞれに対応するnav-item
が入っています。
src
ディレクトリでApp.js
ファイルを開くと、<Navbar>
と5つの<Section>
の実際の位置がわかります。
各<Section>
コンポーネントには、タイトル
とサブタイトル
があります。
このプロジェクトは、各セクションでdummyTextを使用しているので、コードの繰り返しを減らすため、このテキストをDummyText.js
ファイルに追加し、それを各<Section>
コンポーネントにインポートして渡しました。
アプリを実行するには、次のコマンドを入力します。
これにより、アプリが開発モードで起動し、ファイルの保存時にアプリが自動で更新されます。ブラウザのlocalhost:3000
で確認できます。
それではreact-scroll
パッケージをインストールしてその機能を追加しましょう。npm にパッケージ情報が表示されます。
パッケージをインストールするには、次のコマンドを実行します。
次に、Navbar.js
ファイルのバックアップを開き、Link
、animateScroll
という2つのインポート
を追加します。
使い勝手を良くするため、名前をanimatedScroll
からscroll
に変更したことがおわかりでしょう。
インポートをすべて定義したら、nav-items
を更新して<Link>
コンポーネントを使用します。このコンポーネントには、プロパティがいくつかあります。ドキュメントページで、全内容を確認できます。
さしあたり、次のプロパティ:activeClass
、to
、spy
、smooth
、offset
、duration
に注目してください。
activeClass
- 要素に達したときに適用されるクラスが適用されます。to
- スクロール先のターゲット。spy
- scroll
がターゲットの位置にあるとき、Link
を選択させます。smooth
- スクロールをアニメーション化します。offset
- 追加 px分(パディングのように)スクロールします。duration
-スクロールアニメーションの完了までにかかる時間数字か関数が入ります。to
プロパティは、コンポーネントにスクロール先の要素を指示するので、最も重要です。この場合は各<Section>
になります。
offset
プロパティでは、<Section>
に到達するために必要な追加スクロール量を定義できます。
各<Link>
コンポーネントで使用するプロパティの例を次に示します。両者の唯一の違いは、to
プロパティで別の<Section>
をポイントしているところです。
各nav-items
は適宜更新する必要があります。これらを追加したら、ブラウザに戻って(アプリは自動で再起動済のはずなので)、スムーススクロールが有効になったことが確認できるはずです。
activeClass
プロパティを使用すると、to
要素がアクティブなときに、<Link>
コンポーネントに適用するクラスを定義できます。ページ上部にto
要素が表示されていれば、<Link>
がアクティブと判断されます。これは、<Link>
そのものをクリックするか、手動で<Section>
までスクロールすることがトリガーになります。
これを確認するために、Chrome DevTools を開き、次の通り5つ目の<Link>
を調査しました。<Link>
をクリックするか、ページの下部まで手動でスクロールしたときに、アクティブなクラスが確かに適用されているのがわかりました。
これを利用して、アクティブなクラスを作成し、リンクにアンダーラインを追加できます。src
ディレクトリの App.css
ファイルに、このCSSビットを追加できます。
これで、ブラウザに戻って、少しスクロールすると、正しい<Link>
が下線表示されるはずです。
最後に、このパッケージには機能が直接名称になったscrollToTop
、scrollToBottom
などの機能があります。さまざまなイベント同様扱えるものです。
これらの機能に関連して、典型的にはnavbarのアプリケーションロゴからホームページか同じページの上部に移動させます。
これらの機能の一つの呼び出し方の簡単な例として、次のように、nav-logo
にページのトップに戻るクリックハンドラーを追加しました。
ブラウザに戻って、ページを下に向かってスクロールし、navbarのロゴをクリックすると、ページのトップに戻れるはずです。
スムーススクロールは、アプリケーションに美的付加価値を大いに与える機能の1つです。react-scroll
パッケージを使用すると、あまり多くのオーバーヘッドを必要とせずこの機能を活用できます。
このチュートリアルでは、アプリにスムーススクロールを追加して、さまざまな設定を試しました。興味があれば、時間をかけてこのパッケージで利用できる他の機能やイベントも試してみましょう。
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!