javascript

슬라이드 효과 주기 -Ex unsplash이미지(get방식)와 명언(json)을 랜덤으로 뿌리기

grovy 2023. 4. 17. 23:40
728x90

슬라이드 효과를 자동으로 나타내기 

슬라이드 효과 주기 - type 1 나타내기

슬라이드 효과 주기 - type 2 가로

슬라이드 효과 주기 - type 3 세로

슬라이드 효과 주기 - type 4 가로 무한

슬라이드 효과 주기 - type 5 세로 무한

슬라이드 효과 주기 - type 6 버튼슬라이드

슬라이드 효과 주기 - type 7 버튼슬라이드

 

 전체 소스는 요기 

body를 볼게요 ! 

<body class="  font01">
    <header id="header">
        <h1>Javascript slider Effect Ex01 </h1>
        <p>json 명언 & unsplash 이미지 무한가져오기</p>
        <ul>
            <li ><a href="sliderEffect01.html">1</a></li>
            <li><a href="sliderEffect02.html">2</a></li>
            <li><a href="sliderEffect03.html">3</a></li>
            <li><a href="sliderEffect04.html">4</a></li>
            <li><a href="sliderEffect05.html">5</a></li>
            <li><a href="sliderEffect06.html">6</a></li>
            <li ><a href="sliderEffect07.html">7</a></li>
            <li class="active"><a href="sliderEffectEx.html">Ex</a></li>
        </ul>
        <div id="result">
            <h1>오늘의 명언</h1><br>
            <h2 class="wise__quote"></h2><br><br>
            <span class="wise__author"></span>
        </div>
    </header>
   
    <!-- //header-->
    <main id="main">
        <div class="slider__wrap">
            <div class="slider"><img src="https://source.unsplash.com/random/?night=v?1" alt="이미지1"></div>
            <div class="slider"><img src="https://source.unsplash.com/random/?night=v?2" alt="이미지2"></div>
            <div class="slider"><img src="" alt="이미지3"></div>
        </div>
    </main>

위처럼 body영역엔 이미지만 넣어줬어요 ! 

이미지3번은 한꺼번에 3장을 가져오면 2번과 같이 가져와서

script실행해서 넣어줄거에요 

 

css영역을 볼게요 

#header #result{
    margin: 40px;
}
.slider {
    width: 100%;
    position: absolute;
    left: 0;
    top: 0;
    transition: all 0.5s ease-in;
}

.slider:nth-child(1){z-index: -10;}
.slider:nth-child(2){z-index: -11;}
.slider:nth-child(3){z-index: -12;}

.slider에 z-index를 변경하는것과 

명언magin값말곤 없어요.

script  부분을 볼게용

<script>
        const sliderWrap =document.querySelector(".slider__wrap");
        const slider =sliderWrap.querySelectorAll(".slider");
        const img =sliderWrap.querySelectorAll(".slider img");
        let author= document.querySelector(".wise__author");
        let quonte= document.querySelector(".wise__quote");
        let imgUrl1  = "https://source.unsplash.com/random/?night";
        let item =[];
        let currentIndex = 0 ; //현재 보이는 이미지
        let srcRandom =4;
        let sliderCount = slider.length; //전체 이미지 갯수
        let sliderInterval = 4000;      //이미지 변경 간격 시간
        
</script>

먼저 선택자 & 변수를 세팅한뒤

변수들을 선언했고 

imgUrl1 에는 unsplash에서 이미지를 가져오도록했어요 

 

초기값 명언을 넣어줄거에요 

const dataQuestion = () => {
    fetch("json/dummy01.json")  //이파일을 가져올거야  https://getgrovy.github.io/web2023/javascript/quiz/json/gineungsaWD2012_02.json
    .then(res => res.json())        //이파일은 json이야 객체로바꿀꺼야 
    .then(items=> {                 //객체를 한번더 가공해서 출력할꺼야
        //랜덤한 번호의 명언을 가져옴 
        let totIndex = Math.round(Math.random() * items.quotes.length) ;
        //가져온 명언과 지은이를 넣어줌 
        quonte.innerHTML = ` ${items.quotes[totIndex].id}. ${items.quotes[totIndex].quote} `;
        author.innerHTML= `- ${items.quotes[totIndex].author}`;    
        
        //items[]에 모든명언을 가져옴
        items.quotes.forEach(element => {
            item.push({
                id:element.id,
                quote:element.quote,
                author:element.author
            });
        });
    })
    .catch((err) => console.log(err));
}
dataQuestion();

 

unsplash에서 이미지 가져올거에용

setInterval(()=>{
    // 다음이미지와 다다음 이미지의 순번을 미리 세팅
    let nextIndex = (currentIndex +1)%sliderCount;
    let nextnextIndex = (nextIndex +1)%sliderCount;
    // console.log(currentIndex , nextIndex);
    // opacity >>> 0: 완전투명  ~ 1: 완전불투명

    // 지금보이는 이미지는 투명하게
    slider[currentIndex].style.opacity="0";
    // 다음이미지는 화면에 뿌려쥼 
    slider[nextIndex].style.opacity="1";
    // 다다음 이미지는 투명화
    slider[nextnextIndex].style.opacity="0";

    // sliderInterval 후 보여줄 slider[nextIndex] 설정
    currentIndex = nextIndex;
    // 다다음 이미지에 unsplash에서 배경을 받는당
    // 숨김상태라 안보이지만 이미지 주소는 변경됨
    img[nextnextIndex].src = imgUrl1+"v?"+srcRandom;

    // 랜덤한 명언 가져오기
    let totIndex = Math.ceil(Math.random() * item.length)-1 ;
    quonte.innerHTML =  `${item[totIndex].id}. ${item[totIndex].quote} `;
    author.innerHTML = `- ${item[totIndex].author}`;
    srcRandom++;
},sliderInterval);

 

이미지를 3개는 로딩시 가져온뒤 

 

setInterval()함수를이용해서

  1. 지금이미지 숨기기
  2. 다음이미지 보이기
  3. 다다음 이미지숨기기 & unsplash에서 이미지 가져오기 

요렇게 이미지를 뿌려주었어요 

 

slider__wrap의 background-url OR  직접 image.src의 값을 unsplash 주소로 변경 하거나 oaction.reload(true)를 써도...

화면 깜빡여서 이렇게 했어요 ...