今回記事では、実務におけるjQueryを使った実用的な例をCodePenで紹介します。
実装の詳細については、コード内にコメントを入れているので参照してください。
jQueryを初めて学習する方は入門編記事一覧を纏めているのでご覧ください!
ハンバーガーメニュー
レスポンシブデザインでは必須のハンバーガーメニューです。クリックしてナビゲーションメニューがスライドして出てくるものがほとんどです。
jQueryでの処理は単純で、ハンバーガーメニューをクリックすると、ハンバーガーメニューとナビゲーションメニューにopen
クラスを付けたり外したりします。
open
クラスが付く事で、ハンバーガーメニューの形を変え、ナビゲーションメニューの表示をします。
スムーススクロール
ナビゲーションメニューをクリックして該当するセクションへなめらかにスクロールします。
ポイントは以下の点になります。
$('a[href^="#"]')
で、リンク先が#
から始まる<a>
要素(ページ内リンクボタン)全てをセレクタとすることができます。- ページ内リンクボタンから取り出した
href
属性の値を用いて、$(href).offset().top;
とし、リンク先のsection
要素を取得し、且つそのスクロール位置を取得します。 <a>
要素をクリックすると、通常はページの再読込が発生してしまいますが、クリックイベントの最後にreturn false;
としてあげると、再読込をキャンセルすることが出来ます。
アコーディオン
クリックすると、隠してある項目を表示することが出来ます。
取得した要素からトラバースで兄弟要素等を取得し、.slideToggle()
メソッドでその要素の表示・非表示を切り替えています。
ポイントは$(this).next().stop().slideToggle();
等、.slideToggle()
をする前に、一度.stop()
を挟むことです。
これが無いと、アコーディオンを連続でクリックした時に、表示・非表示のアニメーションがクリックした回数分最後まで動作してしまうこととなり、操作性が損なわれます。
トップへ戻るボタン
クリックするとページトップまで滑らかにスクロールします。
ポイントは以下の点になります。
- ボタンは初期状態で非表示とし、
window
のスクロール量に応じて表示する。 <html>
、<body>
要素を対象としてanimation()
メソッドを実行する。
ドロップダウンメニュー
ネストされているナビゲーションメニューへカーソルを重ねるとスライドして表示します。
hover
イベントを使用して、表示・非表示を切り替える単純なものですが、一度stop()
メソッドを挟んでアニメーションを停止することがポイントです。
スクロールしたら系
スクロールイベントにて、要素が画面内のある程度の高さに来たら、ふわっと表示させたり、蛍光マーカー風の効果をつけます。
window
のスクロールイベントを使用し、window
のスクロール位置、各要素のwindow
の上端からの高さから、各要素がwindow
の高さの1/4まで来たかを判定し、show
クラスを付けています。
show
クラスを付けると、ふわっと表示したり、蛍光マーカーが引かれたりするよう、CSSを記述しています。
cssスプライト
CSSだけでもホバーによるスプライトは実装できましたが、ここではクリックによるスプライトの実装になります。
CSS編でも、ホバーしたら二枚繋がっている画像の表示位置を変えるものがありましたが、これはjQueryからクリックイベントをきっかけに画像の表示位置を変えるactive
クラスを付けたり外したりするものです。
タブメニュー
タブメニューによるコンテンツ切替です。
ポイントは以下になります。
- タブメニューをクリックしたら、選択したタブメニューは
select
クラスを付け、それ以外はselect
クラスを外す。 - クリックされたタブの
href
をセレクタとして、$(a.attr("href"))
とし、表示するコンテンツを取得し、show()
で表示、そのままメソッドチェーンで兄弟要素を非表示とする - 初期状態では最初のタブが開かれた状態となるように、最初のタブに
select
クラスを付けて、最初のコンテンツを表示します。
カテゴリ選択
ブログのタグ・カテゴリ選択等のような機能です。
以下がポイントになります。
カテゴリボタンをクリックすると、
- クリックされたボタンに
select
クラスを追加し、ほかのボタンはselect
を外します - クリックされたボタンのID属性からカテゴリを取出し、
all
ならすべての記事を表示、それ以外なら該当するカテゴリの記事のみを表示します - 初期状態では
category_all
のボタンをselect
状態にしておきます
ページのローディング画面
ページの読込中は読込中の画面を表示しておき、読込が完了したら読込中の画面を消して、ページを表示します。
ポイントはwindow.onload
イベントを使用して、読込画面を非表示とするところです。
$(document).ready(function(){})
はHTML文書の読込が完了した時のイベントですが、こちらは画像のロードまでが完了したときのイベントとなります。
まとめ
HTML、CSSの実装とは異なり複雑な所もあるかと思います。まずはコードをコピペしてみる所から始めるのもいいかもしれません!
次回はよくある実装のpart2を紹介します!
次の記事
実務でよくある実装例part2になります!