当サイト使用テーマ・サーバー
\ SWELL【WordPressテーマ】 /
\ レンタルサーバー【ConoHa WING】 /
プログラミング学習
美容・脱毛
ホームページ制作
この記事では、JavaScriptでマウスホバー又はスマホの画面タップで画像が切り替わるプログラミングコードを解説します。
まずは完成形を見ていきます。
メインの画像とサブの画像が3枚あります。
サブの画像をマウスでホバー又はスマホの画面をタップすると写真が切り替わります。
See the Pen js-08 by aqua (@aqua-programdiary) on CodePen.
最初にHTMLのコーディングをしていきます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<div class="main-container">
<img src="https://aqua-programdiary.com/wp-content/uploads/2023/08/image1.jpg" class="main">
</div>
<div class="sub-container">
<img src="https://aqua-programdiary.com/wp-content/uploads/2023/08/image1.jpg" class="sub">
<img src="https://aqua-programdiary.com/wp-content/uploads/2023/08/image2.jpg" class="sub">
<img src="https://aqua-programdiary.com/wp-content/uploads/2023/08/image3.jpg" class="sub">
</div>
</div>
<script src="main.js"></script>
</body>
</html>
<div class="container">
<div class="main-container">
<img src="https://aqua-programdiary.com/wp-content/uploads/2023/08/image1.jpg" class="main">
main
クラスが指定されているため、CSSスタイルを適用する際に使用される可能性があります。<div class="sub-container">
<img src="https://aqua-programdiary.com/wp-content/uploads/2023/08/image1.jpg" class="sub">
sub
クラスが指定されているため、CSSスタイルを適用する際に使用される可能性があります。<img>
タグで表現されています。<script src="main.js"></script>
: main.js
というJavaScriptファイルが読み込まれるスクリプト要素です。このファイルに記述されたJavaScriptコードが実行されます。次にCSSでスタイルを設定していきます。
@charset "utf-8";
img {
max-width: 100%;
}
.container {
width: 500px;
margin: 0 auto;
}
/* 500px以下の場合のスタイル */
@media screen and (max-width: 500px) {
.container {
width: 100%;
}
}
.main-container {
display: grid;
grid-template-columns: 1fr;
margin-bottom: 5px;
}
.sub-container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 5px;
}
img { max-width: 100%; }
<img>
要素の幅を最大100%に設定して、画像が親要素に収まるようにしています。.container
.container
クラスを持つ要素のスタイルです。このクラスはページ全体のコンテナを表します。幅は500pxで、margin
プロパティを使って水平方向に自動的に中央に配置されます。@media screen and (max-width: 500px) { ... }
.container
の幅を100%に変更し、コンテナを画面幅に合わせてフル幅に表示します。.main-container
.main-container
クラスを持つ要素のスタイルです。このクラスはメインコンテンツのコンテナを表します。display: grid
を使用して、コンテンツをグリッドとして配置しています。grid-template-columns: 1fr;
は、1つの列を作成し、その幅をフラクションで指定しています。margin-bottom: 5px;
は下部に5pxのマージンを追加します。.sub-container
.sub-container
クラスを持つ要素のスタイルです。このクラスはサブコンテンツのコンテナを表します。display: grid
を使用して、コンテンツをグリッドとして配置しています。grid-template-columns: 1fr 1fr 1fr;
は、3つの列を作成し、それぞれの幅を均等に分割しています。gap: 5px;
はコンテンツ間の間隔を5pxに設定しています。最後にJavaScriptをコーディングして完成です。
const images=document.querySelectorAll('.sub');
const main=document.querySelector('.main');
for(let image of images){
image.addEventListener('mouseover',function(){
main.src=image.src;
});
}
const images = document.querySelectorAll('.sub');
.sub
クラスを持つすべての要素を取得し、images
という変数に格納します。これはサブ画像要素のリストです。const main = document.querySelector('.main');
.main
クラスを持つ要素(メイン画像要素)を取得し、main
という変数に格納します。for (let image of images) { ... }
images
リスト内の各サブ画像要素に対して繰り返し処理を行います。image.addEventListener('mouseover', function() { ... });
main.src = image.src;
src
属性をサブ画像の src
属性に変更することで、メイン画像がサブ画像に切り替わります。つまり、サブ画像にマウスが乗ると、その画像がメイン画像として表示されるようになります。