見出し画像

jQuery Progate 中級

jQueryの読込み

jQueryを読み込むには、jQueryライブラリーを読み込む必要がある。

1からプログラムを構築していては大変なので、誰かが既に作ったライブラリーからプログラムを呼び出して使うため。

htmlでまずjQueryを読み込む必要があり、body終了タグの直前に以下、

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
 

を差し込む。そして、javascriptファイル内では、

$(function(){

//この中にjQuery文を書いていく

});

モーダルの作成

モーダルとは、指定の場所をクリックイベントにて表示したり、非表示になったりする要素。

作成方法は下記

①htmlで表示させる

②CSSで非表示にさせる。

display: none;

③jQueryで指定の動作を確認したタイミングで、htmlにクラスを与えて表示させる。

$('#login-show').click(function(){
 $('#login-show').fadeIn();
});

表示ボタン と 閉じる のボタンに対するそれぞれのコードの記述が必要

hoverイベント

$('lesson-hover').hover(function(){

function(){
//カーソルが乗っているときに実行したい処理
},
function(){
//カーソルに乗っていないときに実行したい処理
}

});

hover時に text-activeというクラスがあればレッスンの説明を表示するようにする。

そのためには

①cssで .text-active{display: block}を指定

②cssでマウスが乗った時に.text-activeが表示されるようにjsでコード

③cssでマウスが外れたときに.text-activeが非表示になるようにjsでコード 

【addClassメソッド】

$('.text-contents').addClass('text-active');
                          //クラス指定時にドット「.」は不要な点に注意★

【removeClassメソッド】

$('.text-contents').removeClass('text-active');

                          //クラス指定時にドット「.」は不要な点に注意★

以下例文

$('.lesson-wrapper').hover(function(){
        
    $(this).find('text-contents').addClass('text-active');
   //①、② 
   $(this).find('.text-contents').removeClass('text-active');
  //③、④ 
    });

$(this).find('text-contents').addClass('text-active'); 

①this は esson-wrapper クラスの上にカーソルが来たら
lesson-wrapper クラスの中から text-contents クラスを全て取得する

②text-contents に対して text-active  クラス を加える

③this は lesson-wrapper 上からカーソルが外れたら
lesson-wrapper クラスの中からtext-contentsクラスを全て取得する

④text-contents  に対して text-active クラス を除外する

という状況。

アコーディオン

htmlで

<div class="answer"></div>
<div class="answer-open"></div>

として、 下のanswer-open は answer が開いたときの目印のクラス名にする。

【hasClass】

引数に指定した クラス を オブジェクト が持っているのか 判定するときに使用。

オブジェクト が指定の クラス を持っていれば true。

  持っていなければ false を返す。

以下html

<div class="answer"></div>
<div class="annswer open"></div>

以下、js

$('.answer').hasClass('open');

 // 結果: false


$('.answer open').hasClass('open');


// 結果: true

【if文を用いた開閉操作】

faq-list-item をクリック → .answer  は  .open を持っているか?

持っている場合: true → .open を外す → .answer を隠す

持っていない場合: false → .openをつける → .answer  を表示。

以下、応用例文。

  $('.faq-list-item').click(function() {            
   var $answer = $(this).find('.answer');            
   if ($answer.hasClass('open')) {            
   $answer.removeClass('open');            
   } else {            
   $answer.addClass('open');            
     }            
  });

①var $answer = $(this).find('.answer'); → .faq-list-item が クリック されたときに .faq-list-item 内の .answer 値が 取得される。そして $answerに代入される。 

つまり htmlの answerクラス は クリックされると 以下の処理をしますということ。

②もし .answer がオブジェクト内に .open を持っている場合trueで

.answer から .open を取り除く処理を実行

③.answer がオブジェクト内に .open を持っていない場合はfalseで

.answer に .open を加える処理を実行。

現状は .open  はないので .open を加える処理を実行する。

正直ここだけで終わらせると意味が分からないので、次のコードをさっさと見た方がよいかと(笑)

  $('.faq-list-item').click(function() {
   var $answer = $(this).find('.answer');
   if($answer.hasClass('open')) { 
     $answer.removeClass('open');
     // slideUpメソッドを用いて、$answerを隠してください
     $answer.slideUp();

     // 子要素のspanタグの中身をtextメソッドを用いて書き換えてください
    $(this).find('span').text('+');
     
   } else {
     $answer.addClass('open'); 
     // slideDownメソッドを用いて、$answerを表示してください
       $answer.slideDown();
     
     // 子要素のspanタグの中身をtextメソッドを用いて書き換えてください
     $(this).find('span').text('-');
     
   }
 });

さっきのものにいくつか追加。

①-1 if($answer.hasClass('open')) {
$answer.removeClass('open');

$answer.slideUp();

これは もし .answer がオブジェクト内に .open を持っている場合trueで

.answer から .open を取り除く処理を実行。

それに合わせて、.answer  を フェードアウトで消す処理も実行。

つまり、openがある時にクリックをしても閉じる処理をするという意味。

①-2 $(this).find('span').text('+');

→span タグを取得して、このテキストを”+”に書き換える処理も実行。

②-1 $answer.addClass('open');
// slideDownメソッドを用いて、$answerを表示してください
$answer.slideDown();

.answer が .open をもっていない場合は .open を追加して、

slideUP で .open を表示。 

こちらは逆で、オープンを持っていないときにクリックするとオープンをしますよという意味。

かつ 

$(this).find('span').text('-');

.answer 内の span すなわち+    を取得して text すなわち- に変えるという処理を実行。

これをすべてのanswerに実行しているということで、とても納得。

これでProgate中級編は終了!

いいなと思ったら応援しよう!