jQuery

jQueryでフェードインフェードアウトdisplay:noneを使用してfadeToggle【jQuery】

jQueryで複数の要素を個別にフェードイン・フェードアウトの概要

注意 ※バージョンや環境によっては正常に動作しない可能性があります。

display:noneを使用するフェードイン・フェードアウトでは自分が一番気に入っている形です。

採用したのはこの方法でした。採用時は複数のトリガーと複数の要素が組み合わさっているので、短縮のためにサンプルよりも複雑なコードになりましたが、基本の動きはこの形でした。

CSSのtransitionやanimationを使う書き方に比べると、シンプルでわかりやすい書き方です。

環境などの制限がなければ、jQueryはやっぱり便利だな~という印象でした。ただjQueryの更新の問題や、バージョンが古いjQueryだと…というのは数年前から良く見る話でして、中々に難しい話でもあります。

jQueryはできるだけ最新版を使うのが良いでしょう。1系は脆弱性がある、というのは結構前から言われてますね。

ワードプレスのテーマcocoonには、jQueryのバージョンを設定で変更できるので、いいテーマだな~と思います。

  • jQueryのfadeToggleでフェードイン・フェードアウト
  • 表示・非表示をする要素にdisplay:noneを指定
  • トリガーをクリックすると、透明度が変化し、表示・非表示が切り替わる
  • fadeToggleはjQuery3.0のスリム版では動かない

fadeToggleの動作サンプル

ここをクリック(trigger)

triggerをクリックするとdisplay noneがdisplay blockにかわり、opasityが0から1なる。表示されている状態でクリックすると、opasityが1から0になった後に、display noneになる。

トリガーをクリックすると、fadeToggleが作動する。

chromeの開発環境でクラスcontentsの行を見ていると、displayの変化と、opacityの変化を見ることができる。

ソースコード

HTML

<div class="trigger">
  <p>ここをクリック(trigger)</p>
</div>
<div class="contents">
  <p>triggerをクリックするとdisplay noneがdisplay blockにかわり、opasityが0から1なる。表示されている状態でクリックすると、opasityが1から0になった後に、display noneになる。<p>
</div>

CSS

.contents {
    background-color: #fff;
    border: 1px solid rgba(0, 0, 0, 0.125);
    border-radius: 0.25rem;
    padding: .5rem;
    margin-top: .5rem;
    display:none;
  }
.trigger{
      background-color: #bdffc6;
  }

jQuery

$(function() {
  $('.trigger').click(function() {
    $('.contents').stop().fadeToggle(1000);
  });
});

triggerをクリックしたときに、contentsにfadeToggleを動作させる形。

stop()は連続クリックへの対応。

コードの説明

説明を読まなくても見ればわかる、ぐらいの単純なコードになります。

HTMLではクラス設定にて、クリックする場所のtriggerと、要素のcontentsを指定しています。

他の方法では表示・非表示をクラスの切り替えで設定したり、hoverで指定したり、heightを0にしたり、と様々なCSSの記述が増えていましたが、jQueryのfadetoggleを使用する場合は、トリガーと要素の2つのクラスしか使用していません。

CSSのとしては、contentsクラスに初期の表示でdisplay:noneを設定し、その他は表示されたときのデザイン設定をしています。triggerクラスにも見た目の設定しかしていません。

動作部分はjQueryで記述してあります。

clickイベントが起きると、contentsに対して、fadeToggleが作動して、contents内にdisplay:noneがあれば、それを無効にして1000ミリ秒(1秒)で透明度が1になります。display:noneが無ければ、透明が0になった後に、display:noneが有効になります。

cssで透明度の設定をしなくても、fadeToggle側で勝手に対応してくれるのが楽なところです。

コード的には非常に単純で、短くて済みます。JavaScriptでも同様の動作はできますし、コードの耐用性などを考えると、JavaScriptで書いた方が良い環境もあるかと思いますが、jQueryだと手軽なので、用途に合わせて上手く選択するのが良いんだろうな~と思います。

注意点としては、fadeToggleはjQuery 3.0のスリムビルド版では使えない、というところですかね。Bootstrapを導入している時は少し注意が必要でして、公式のドキュメントページでのjQueryのCDNのコードはスリム版になっています。

fadeToggleを使う場合は、jQuery3.0は通常版を使用する必要があります。

fadeToggleはjQuery 3.0のスリムビルド版では使えない

fadetoggleの詳細

fadeToggleでは、()の中で、「([duration][,easing][,complete]) 」を設定することができます。

durationには変化に要する時間をミリ秒単位で設定できます。1000ミリ秒が1秒です。

省略時は400msになります。’fast’、’slow’と文字でも設定できます。slowは600fastは200になります。

間違えた設定(‘1000’)とか、をすると、自分の環境では何も設定していなのと同じ動作をしています。

easingには、変化速度の種別を指定します。省略時は ‘swing’ で動作開始時はゆっくりで、後半に早く変化するタイプです。Easingはよくグラフで一覧にしているページなどがあるので、そのあたりをググると良いと思います。

complete には、アニメーションが完了した時に呼び出す関数を指定することができます。

まとめ

コードが短くて済むのと、直感的なのでわかりやすいコードです。

jQueryを使って良ければ実装が楽な方法です。

jQueryを使うことの賛否というのはいろんな意見があり、また、環境によっても変わるので一概には言えないのですが、リスクとリターンの兼ね合いになるので、その時々で適切なものを選択できれば良いのかなと思います。

更新の手間や、更新できないことに脆弱性の問題、どれぐらいの持つのかの耐用性などなど、仕事になるとどうしても制限が生まれるので、中々に難しいのかな~とは思います。

display:noneを使ってフェードイン・フェードアウトをしたいだけならば、かなり簡単な方法なので、利点は大きいかなと思います。

タイトルとURLをコピーしました