본문 바로가기
바닐라코딩 사전학습/코드연습, 퀴즈, 과제

Craousel

by 꼬마보노 2021. 12. 24.

아이디어

1) 뼈대를 HTML로 작성
2) 화살표를 누르면 이미지 바뀌도록 JS 작성
2-1) button.addEventListner("click", function ButtonClick(){}) 를 사용해서 화살표를 누르면 다음 이미지로 넘어가도록 작성, 배열에 이미지를 넣어서 배열에 담긴 이미지를 순차적으로 보이도록 해보자.
2-2) 좌우 화살표와 아래 라디오버튼 동기화. -> 3-1)에서 선언한 $input 변수를 이용해서 $input[].checked = "checked";로 라디오버튼을 체크하였다.
3) 아래 버튼에 해당하는 상호작용 JS작성
3-1)버튼을 누를 때마다 배열의 인덱스를 재설정, JS의 number를 index로 지정.


정리할 것 

Array() 생성자->배열 리터럴과 비교해서 정리 & 생성자함수와 new키워드 정리 & this키워드 정리 & window객체


잘 안된 부분

div태그 내에 있는 좌 우 화살표를 각각 어떻게 다른 화살표로 인식해서 동작하게 할 지 고민함 -> 클래스명을 각각 따로 줘서 해결, ev.target.textContent === ___ 는 왜 안된걸까..?
배열에 담은 이미지파일명을 이미지태그에 어떻게 옮길까 고민함 -> 이미지태그를 변수로 가져와서 .src로 옮겨줌.
처음과 마지막 사진에서 어떻게 마지막과 처음사진으로 이동할 지 고민함 -> 중첩 if문을 써서 배열 인덱스를 처음 사진일 시 -1 인덱스가 들어오면 마지막 사진으로 가도록, 마지막은 그와 반대로 작성함.

addEventListner is not a function 오류 해결 -> getElementsByTagName()으로 가져오는 요소는 배열이므로 몇번째 요소인지를 명시해야한다.
정렬파트 잘 안됨. 화살표와 사진들을 div안에 넣고 그 내부를 span으로 각각 써서 정렬하였다. 정렬파트 정리!

<html>
    <head>
        <link rel="stylesheet" href="style.css">
    </head>
    <body style="background-color: rgb(0, 119, 255);">
        <div class="box">
            <span><button class="mainbutton_left">&#60;</button></span>
            <span><img src="./images/image-1.png" width="1000px;" height="300px;"></span>
            <span><button class="mainbutton_right">&#62;</button></span>
        </div>
        <div class="subbutton">
            <span>
                <input type="radio" name="button" value="image1" checked="checked">
                <input type="radio" name="button" value="image2">
                <input type="radio" name="button" value="image3">
                <input type="radio" name="button" value="image4">
                <input type="radio" name="button" value="image5">
            </span>
        </div>
        <script type="text/javascript" src="Carousel.js"></script>
    </body>
</html>

 

 

var images = new Array();
for(let i=0; i<5; i++){
    images[i] = `image-${i+1}.png`;
};

var number = 0;
const $div = document.getElementsByTagName("div");
const $getimage = document.getElementsByTagName("img");
const $input = document.getElementsByTagName("input");

$div[0].addEventListener("click", function onClick(ev){
    if(ev.target.tagName === "IMG"){
        return;
    }
    else if(ev.target.className === "mainbutton_left"){
        number -= 1;
        if(number === -1){
            number = 4;
            $getimage[0].src = `./images/${images[number]}`;
            $input[number].checked = "checked";
        }else {$getimage[0].src = `./images/${images[number]}`; $input[number].checked = "checked";};
    }
    if(ev.target.className === "mainbutton_right"){
        number += 1;
        if(number === 5){
            number = 0;
            $getimage[0].src = `./images/${images[number]}`;
            $input[number].checked="checked";
        }else {$getimage[0].src = `./images/${images[number]}`; $input[number].checked = "checked";};
    }
});

$input[0].addEventListener("click", function Click(ev){
    number = 0;
    $getimage[0].src = `./images/${images[number]}`;
});
$input[1].addEventListener("click", function Click(ev){
    number = 1;
    $getimage[0].src = `./images/${images[number]}`;
});
$input[2].addEventListener("click", function Click(ev){
    number = 2;
    $getimage[0].src = `./images/${images[number]}`;
});
$input[3].addEventListener("click", function Click(ev){
    number = 3;
    $getimage[0].src = `./images/${images[number]}`;
});
$input[4].addEventListener("click", function Click(ev){
    number = 4;
    $getimage[0].src = `./images/${images[number]}`;
});
//이 부분 반복문으로 짧게 할 수 있을 것 같은데.. 생각해보자

 

 

.box{
    text-align: center;
}

.subbutton{
    text-align: center;
}
button{
    width: 30px;
    height: 30px;
    border-radius: 50%;
    border: 0px;
    background-color: whitesmoke;
    opacity: 0.2;
    position: relative;
    top: -150px;
}

button:hover{
    opacity: 1;
}