画像のスライド効果
10469 ワード
画像スライド
作成する
左右クリック時に画像を別の画像に切り替える機能の作成
あらかじめ準備する
html、cssの使用
<div class="box">
<img src="img/img-0.jpg" width="350" height="350" id="img">
<h4 id="name">사과 이름 0</h4>
<p id="txt">사과 설명 0</p>
<a href="#" class="btn prevBtn">Prev</a>
<a href="#" class="btn nextBtn">Next</a>
</div>
.box {
position: relative;
width: 500px;
padding: 50px;
background-color: #fff;
border-radius: 5px;
border: solid 1px black;
margin: 100px auto;
}
.btn {
display: inline-block;
position: absolute;
background-color: #cccccc;
padding: 10px;
color: #ffffff;
}
.prevBtn {
top: 50%;
left: 0;
transform: translate(-120%, -50%);
}
.nextBtn {
top: 50%;
right: 0;
transform: translate(120%, -50%);
}
配列と基点
画像のファイルパス、画像のタイトル、説明を含む配列を作成します。
ボタンをクリックして配列をナビゲートすると、htmlドキュメントに含まれる情報を置換できます。
基点を作成
var arr = [
{
img: "img/img-0.jpg",
name: "사과 이름 0",
txt: "사과 설명 0"
},
{
img: "img/img-1.jpg",
name: "사과 이름 1",
txt: "사과 설명 1"
},
{
img: "img/img-2.jpg",
name: "사과 이름 2",
txt: "사과 설명 2"
},
{
img: "img/img-3.jpg",
name: "사과 이름 3",
txt: "사과 설명 3"
}
];
// 기준점
var i = 0;
クラスのインポート
btnクラスを持つすべての領域をインポート
querySelector Allをインポートする場合は、html領域を配列と同じ形式でインポートすると見なすことができます。
0番目prevbtn 1番目nextbtnを含む構造
console.log(document.querySelectorAll('.btn'));
繰り返し文と結合
foreach反復文との組合せ
console.prevとnextをlogで印刷する
重複する文が使用されているため、アレイ内の各データが出力されます。
document.querySelectorAll('.btn').forEach(function (element, index) {
console.log(element);
});
イベントの追加
各ボタンにaddEventでclickイベントを入れ、consoleします。「hello」をログとして入力すると、クリックするたびに「hello」が出力されます。
document.querySelectorAll('.btn').forEach(function (element, index) {
element.addEventListener('click', function(e) {
console.log('Hello');
});
});
問題が発生
クリックするたびに上部に移動
aラベルの値(#)のため、クリックするたびに移動します
aラベルには、クリック時に他のページにジャンプしたり、他のhtmlドキュメントにジャンプしたり、他のクリエイティブな部分にジャンプしたりする機能があります。
すなわち,aタグ自体の機能が起動したことによる問題である.
私たちは純粋なボタンしか使用していないので、aラベルが持つ固有の機能を阻止します。
タグ自体をブロックする機能
e(イベントオブジェクト)をパラメータとしてe.preventDefaultを適用すると、既存の機能は消え、純粋なボタンとしてのみ使用できます
element.addEventListener('click', function(e) {
e.preventDefault();
});
私がクリックしたaラベルがprevなのかnextなのかを知る必要があります。
このようにして、アレイ内で0,1,2,3,1を順番に実行し、逆さまに実行することを決定します。
私がクリックしたボタンがprevなのかnextなのかを知る方法はe.target propertyを使うことです
element.addEventListener('click', function(e) {
e.preventDefault();
console.log(e.target);
});
クラスが存在するかどうかを確認
私がクリックした領域にクラスがあるかどうかを知るにはclasslist、containsを使用する必要があります。
検索するクラスを引数として渡す
prevクリック時prevクリックのみ次クリック時nextクリックのみ
構文を結合すると、クリックしたボタンにprevBtnクラスが含まれている場合はprevが出力され、nextBtnが含まれている場合はNextが出力されます。
document.querySelectorAll('.btn').forEach(function (element, index) {
element.addEventListener('click', function(e) {
e.preventDefault();
if(e.target.classList.contains('prevBtn')) {
console.log('Prev');
}
if(e.target.classList.contains('nextBtn')) {
console.log('Next');
}
});
});
indexを増やしたり減らしたりしてアレイデータを参照
indexの値はnextで1を増やしprev 1で1を減らし、配列内でデータをナビゲートする機能を作成します
Nextボタンをクリックするとiを1に追加
srcプロパティを使用して画像のパスを変更する
作成したarr配列にインクリメンタルインデックスを割り当てると、最初に割り当てられたデータが得られます。
textContentに対応する配列の名前とtxtを画面に出力
if(e.target.classList.contains('nextBtn')) {
i++;
document.getElementById('img').src = arr[i].img;
document.getElementById('name').textContent = arr[i].name;
document.getElementById('txt').textContent = arr[i].txt;
}
Nextをクリックすると画像がスキップされ、文字が置換されます
3番目のデータの後にエラーが発生しました
3回目の出現では0を返すのではなくiが増加し続けるため,インデックスが4になるにつれてarr配列には4番目のデータがない.
私はあなたに持っていないデータを持って帰らせて、結局間違いが発生しました。
つまり、3番目の状態で「次へ」をクリックすると、0番目に戻さなければなりません。
if文でif文を使用する
iがarr.length(4)−1=3になると、iはコードを記述し、−1になる。
iを-1に指定するのは、ifゲート外のコードi++がすぐに0になるからです。
このコードを作成すると、3番目と0番目のimgがインポートされます。
if(e.target.classList.contains('nextBtn')) {
if(i === arr.length - 1) {
i = -1;
}
i++;
document.getElementById('img').src = arr[i].img;
document.getElementById('name').textContent = arr[i].name;
document.getElementById('txt').textContent = arr[i].txt;
}
整理コード
var i = 0;
document.querySelectorAll('.btn').forEach(function (element, index) {
element.addEventListener('click', function(e) {
e.preventDefault();
if(e.target.classList.contains('prevBtn')) {
if(i === 0) {
i = arr.length;
}
i--;
document.getElementById('img').src = arr[i].img;
document.getElementById('name').textContent = arr[i].name;
document.getElementById('txt').textContent = arr[i].txt;
}
if(e.target.classList.contains('nextBtn')) {
if(i === arr.length - 1) {
i = -1;
}
i++;
document.getElementById('img').src = arr[i].img;
document.getElementById('name').textContent = arr[i].name;
document.getElementById('txt').textContent = arr[i].txt;
}
});
});
Reference
この問題について(画像のスライド効果), 我々は、より多くの情報をここで見つけました https://velog.io/@woosungkim0123/버튼テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol