버튼을 클릭하면 명언이 나와요
-이름이 나와요
최종 완성본
이번에도 API없이 코드로 만들어보는 슬라이드 유형입니다.
이번에는 absolute없이 사용하는 방법입니다.
(JAVASCRIPT, GSAP, jQuery를 사용했습니다.)
HTML+CSS코드
<style>
/* slider__wrap */
.slider__wrap {
width: 100%;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
/* 이미지가 보이는 영역 */
.slider__img {
position: relative;
width: 800px;
height: 520px;
/* overflow: hidden; */
}
/* 전체 이미지를 감싸고 있는 부모 : 움직이는 영역 */
.slider__inner {
display: flex;
flex-wrap: wrap;
width: 4000px;
height: 520px;
}
/* 개별적인 이미지 */
.slider {
position: relative;
width: 800px;
height: 520px;
}
#header li a {
line-height: 27px;
}
</style>
</head>
<body class="img02 bg02 font05">
<header id="header">
<h1>Javascript Slider Effect02</h1>
<p>슬라이드 이팩트 : 좌로 움직이기</p>
<ul>
<li><a href="sliderEffect01.html">1</a></li>
<li class="active"><a href="sliderEffect02.html">2</a></li>
<li><a href="sliderEffect03.html">3</a></li>
<li><a href="sliderEffect04html">4</a></li>
<li><a href="sliderEffect05.html">5</a></li>
</ul>
</header>
<!-- //header -->
<main id="main">
<div class="slider__wrap">
<div class="slider__img">
<div class="slider__inner">
<div class="slider"><img src="./img/slider_bg07b.jpg" alt="이미지1"></div>
<div class="slider"><img src="./img/slider_bg08b.jpg" alt="이미지2"></div>
<div class="slider"><img src="./img/slider_bg03b.jpg" alt="이미지3"></div>
<div class="slider"><img src="./img/slider_bg04b.jpg" alt="이미지4"></div>
<div class="slider"><img src="./img/slider_bg06b.jpg" alt="이미지5"></div>
</div>
</div>
</div>
</main>
<!-- //main -->
<footer id="footer">
<a href="mailto:skadldldl123@gmail.com">mailto:skadldldl123@gmail.com</a>
</footer>
<!-- //footer -->
</body>
코드 설명
(이번거가 특히 이해가 안가서 1시간 쳐보고 이해가 갔습니다.)
1.div태그인 slider__wrap은 전체 내용물을 이동 시켜줍니다.
(이번것도 align-items는 먹히지 않아서 height값을 부여해서 가운데로 이동하였습니다.)
2.div태그인 slider__img는 이제 보여줄 width만큼만 주고 overflow로 잘라줍니다.
(주렁 주렁 달고온 것들을 눈에 안보여주게 하고. 그것들을 translateX로 width값만큼 이동을 시켜주면 됩니다.)
3.div태그인 slider__inner는 .slider의 모든 width값을 합한만큼 줍니다.
(display:flex를 주면 좌->우로 주렁 주렁 달고 옵니다. + flex-wrap 필수)
4.div태그인 slider는 각각 width를 줍니다.
JAVASCRIPT코드
<script>
// 선택자
const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = sliderWrap.querySelector(".slider__img"); //보여지는 영역
const sliderInner = sliderWrap.querySelector(".slider__inner"); //움직이는 영역
const slider = sliderWrap.querySelectorAll(".slider"); //개별 영역
let currentIndex = 0; //현재 보이는 이미지
let sliderCount = slider.length; //이미지 갯수
let sliderInterval = 3000; //이미지 간격 시간
</script>
<script>
// javascript
// 트랜지션 설정
// sliderInner.style.transition = "all 0.6s";
// setInterval(() => {
// 1 % 5 = 1 / 2 % 5 = 2 / 3 % 5 = 3 / 4 % 5 = 4 / 5 % 5 = 0
// currentIndex = (currentIndex+1) % sliderCount;
// sliderInner.style.transform = "translateX(" + (-800 * currentIndex) + "px)";
// 위에 코드 예를 들은 것임.
// // sliderInner[index].style.transform = translateX("-800px"); //-800 * 1
// // sliderInner[index].style.transform = translateX("-1600px"); //-800 * 2
// // sliderInner[index].style.transform = translateX("-2400px"); //-800 * 3
// // sliderInner[index].style.transform = translateX("-3200px"); //-800 * 4
// // sliderInner[index].style.transform = translateX("-0px"); //-800 * 0
// }, sliderInterval);
</script>
<!-- GSAP CDN -->
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>
<script>
// GSAP CDN - https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js
setInterval(() => {
currentIndex = (currentIndex + 1) % sliderCount;
// gsap.to(".클래스이름", {속성:값});
// gsap.to(대상, {속성:값});
gsap.to(sliderInner, {
// x : translateX
x : -800 * currentIndex,
duration : 1,
ease : "elastic.out"
});
}, sliderInterval);
</script> -->
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"></script>
<script>
setInterval(() => {
// currentIndex = (currentIndex + 1) % document.querySelector(".slider").length;
currentIndex = (currentIndex + 1) % $(".slider").length;
console.log(currentIndex);
// jquery는 translate을 지원하지 않음
$(".slider__inner").css("position", "relative");
$(".slider__inner").animate( {left: -800 * currentIndex}, 1000, "easeOutElastic")
}, sliderInterval);
</script>
코드 설명
1.
// 선택자
const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = sliderWrap.querySelector(".slider__img"); //보여지는 영역
const sliderInner = sliderWrap.querySelector(".slider__inner"); //움직이는 영역
const slider = sliderWrap.querySelectorAll(".slider"); //개별 영역
querySelector로 클래스, 아이디, 태그를 찾습니다.
2.
let currentIndex = 0; //현재 보이는 이미지
let sliderCount = slider.length; //이미지 갯수
let sliderInterval = 3000; //이미지 간격 시간
- currentIndex는 이제 현재 보여줄 이미지로 opacity로 숨겨주고 난 다음에 데이터를 저장시켜서 이동하는 효과를 줄 예정입니다.
- sliderCount는 div태그인 .slider 이미지의 전체 갯수인비다.
- sliderInterval은 setInterval를 동작시킬때의 시간입니다.(3초)
3. JAVASCRIPT로 만들어 보기
<script>
// javascript
// 트랜지션 설정
sliderInner.style.transition = "all 0.6s";
setInterval(() => {
// 1 % 5 = 1 / 2 % 5 = 2 / 3 % 5 = 3 / 4 % 5 = 4 / 5 % 5 = 0
currentIndex = (currentIndex+1) % sliderCount;
sliderInner.style.transform = "translateX(" + (-800 * currentIndex) + "px)";
// 위에 코드 예를 들은 것임.
// sliderInner[index].style.transform = translateX("-800px"); //-800 * 1
// sliderInner[index].style.transform = translateX("-1600px"); //-800 * 2
// sliderInner[index].style.transform = translateX("-2400px"); //-800 * 3
// sliderInner[index].style.transform = translateX("-3200px"); //-800 * 4
// sliderInner[index].style.transform = translateX("-0px"); //-800 * 0
}, sliderInterval);
</script>
sliderInner은 div태그 .slider__inner로 div태그 .slide의 모든 width값을 합한만큼 가진 아이입니다.(4000px)
translateX로 -800(좌측)으로 이동 시켜줍니다.(currentIndex의 값만큼 곱해줍니다)
4.GSAP을 활용한 방법
<!-- GSAP CDN -->
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js"></script>
<script>
// GSAP CDN - https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.5/gsap.min.js
setInterval(() => {
currentIndex = (currentIndex + 1) % sliderCount;
// gsap.to(".클래스이름", {속성:값});
// gsap.to(대상, {속성:값});
gsap.to(sliderInner, {
// x : translateX
x : -800 * currentIndex,
duration : 1,
ease : "elastic.out"
});
}, sliderInterval);
</script> -->
이것도 간단합니다.
3번의 코드를 그대로 사용하고. 전체 크기를 담고 있는 div태그인 sliderInner를 가져옵니다.
그리고 translateX로 -800 * currentIndex(1,2,3,4,5)를 곱해주면 됩니다.
Gsap에서는 translateX가 x입니다.
5.jQuery를 활용한 방법
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js"></script>
<script>
setInterval(() => {
// currentIndex = (currentIndex + 1) % document.querySelector(".slider").length;
currentIndex = (currentIndex + 1) % $(".slider").length;
console.log(currentIndex);
// jquery는 translate을 지원하지 않음
$(".slider__inner").css("position", "relative");
$(".slider__inner").animate( {left: -800 * currentIndex}, 1000, "easeOutElastic")
}, sliderInterval);
</script>
이것도 간단합니다.
3번의 코드를 그대로 사용하고.
left의 값만큼 이동 시켜주면 됩니다.(-800px은 좌측으로 이동)
~_~
