【デイトラ初級編】jQuery実践課題②モーダルで画像の拡大表示

当ページのリンクには広告が含まれています。
デイトラ初級編モーダルで画面の拡大表示

2024年8月から、デイトラでWeb制作コースを学んでいます。

今回は初級編DAY22「調べながら実装しよう」で、jQueryを使って自分でサイトの動きを実装する課題その2です。

初級編で構築したスイーツサイトに動きをつける課題がさらに1つ出ました。

  1. モーダルで画像の拡大表示

よくある、画像をクリックすると拡大されるあれです。

くうか

なかなか上手くいかず手間取りました。おかげで理解できた…と思います!

この記事を書いた人

くうか(元SEの主婦ミニマリスト)

  • 20代でシステムエンジニアを経験(VBやJavaなど)
  • ブラック企業だったことで7年ほどでSEを退職
  • 2018年からブログ開始
  • はてなブログ→WordPress「SWELL」へ(2020年〜)
  • オリジナルのブログカスタマイズを公開
  • SWELL公式サイトにメインブログが掲載されました
  • Webプログラミングを勉強中(今ここ)
目次

まずはjQueryを読み込ませる準備をしよう

すでに準備が済んでいる方は、このステップは必要ありません。

まずはjsフォルダを作り、直下にscript.jsファイルを作成。

bodyタグを閉じる直前にjQuery読み込みコードを追加します。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="./js/script.js"></script>
くうか

うっかり忘れるところだったので最初に書いておこう。

③モーダルで画像の拡大表示

実装する課題
  • メニュー一覧の画像をクリックすると
  • 縦横画面いっぱいに薄いグレーの背景ボックスを表示
  • その枠の中心に拡大されたメニュー写真を表示
  • 画面のどこかをクリックすると拡大写真と背景ボックスを非表示
  • アニメーションはフェードイン・フェードアウト

”どの写真をクリックしたのか?”を取得する処理が1番難しそう。(どうやってやるの?笑)

モーダルのHTML

各メニュー画像のimgタグを空のaタグで囲みます。カーソルが変わってリンクされてるってわかるので。

<a href=""><img src="./img/menu1.png" alt="おすすめ ストロベリーケーキ"></a>

拡大画像のhtml(imgタグは空)をフッターの後ろあたりに追加しました。↓

<!-- メニューの拡大画像 -->
<div class="menu-modal">
    <img src="" alt="" class="menu-bigimg">
</div>

課題②のページトップへ戻るボタンより後ろに書いておくと、こちらの方が配置が上に来るのでいいかなと。

モーダルのCSS

/* モーダルで画像の拡大表示*/
.menu-modal {
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  width: 100%;
  height: 100vh;
  background-color: rgba(0, 0, 0, 0.8);
  display: none;
}

.menu-bigimg {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  max-width: 60%;
  margin: auto;
  display: block;
}

.menu-img:hover {
  opacity: 0.7;
}
menu-modal:薄いグレーの背景ボックス
  • positionプロパティのfixedはその場所に固定する
  • top0、left0の位置に
  • 幅は100%、高さは100%は100vhと記載する
  • display:none;でデフォルトは非表示にする
menu-bigimg:拡大画像
  • positionプロパティのabsoluteは自由に配置できる
  • 最大幅は60%(お好みで)
  • top、bottom、left、rightをゼロにしmargin:autoとすることで画面真ん中に配置される
くうか

真ん中に配置するっていうのが一筋縄ではいかなかった…

モーダルのjQuery

//モーダルで画像の拡大表示
jQuery(".menu-img a").click(function(){//画像のdivとaタグがクリックされたら
    var imgSrc = jQuery(this).children().prop("src");//子要素のsrc属性を取得
    jQuery(".menu-bigimg").prop("src",imgSrc);//拡大htmlのsrc属性に上書き
    jQuery(".menu-modal").fadeIn();//フェードイン表示
    jQuery("body").css("overflow", "hidden");//画面下をスクロールさせない
    return false;//aタグの無効化
});
jQuery(window).click(function(){//画面のどこかがクリックされたら
    jQuery(".menu-modal").fadeOut();//フェードアウト表示
    jQuery("body").css("overflow","auto");//スクロールロック解除
});

参考サイト

【デイトラ学習記録】WEB制作コース中級編DAY6|PISCA PISCA

難しかったところが、最初の行「jQuery(“.menu-img a”).click(function(){」の””内。

.menu-imgだけで良いと考えていたけどどうしても動かなくて、たくさん調べたらaが必要?となって追加してみたら動きました。

あと属性取得のpropはattrを使っている人も多かったけど、近頃一般的なのはpropだという記述を読んでこちらを採用しました。

スクロールロック「jQuery(“body”).css(“overflow”, “hidden”);」は一応入れてみました。

くうか

今回はjQueryが1番難しかったです。

【まとめ】jQueryでモーダルで画像の拡大表示を実装しよう

今回は「モーダルで画像の拡大表示」を実装しました。

  1. モーダルのHTML作成(aタグの追加・拡大表示用HTML)
  2. モーダルのCSS作成(モーダルの背景・画像の配置)
  3. モーダルのjQuery作成(クリック時に画像の要素を取得・フェードインフェードアウト・スクロールロック)

それぞれの処理がかなり難しく感じました。さすが3番目の課題!

色んなサイトや今回は役に立たなかったchatGPTさんのコードを何度も試して、ようやくこれだ!となりました。

くうか

とても勉強になった気分です。笑

デイトラは比較的安価だし、自宅で自分のペースで学習できるので私には合っていました。

①②の課題の記事はこちらから。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次