티스토리 뷰
Script Sample/SliderEffect
Slider Effect - 무한, 버튼 추가, 닷 버튼, 자동 플레이, 시작 버튼, 정지 버튼
babydeveloper 2022. 4. 7. 09:13
const sliderWrap = document.querySelector(".slider__wrap");
const sliderImg = document.querySelector(".slider__img");
const sliderInner = document.querySelector(".slider__inner");
const slider = document.querySelectorAll(".slider");
const sliderBtn = document.querySelector(".slider__btn");
const sliderBtnPrev = sliderBtn.querySelector(".prev");
const sliderBtnNext = sliderBtn.querySelector(".next");
const sliderDot = document.querySelector(".slider__dot");
let currentIndex = 0;
let sliderWidth = sliderImg.offsetWidth; //이미지 가로값
let sliderLength = slider.length; //이미지 갯수
let slideFirst = slider[0]; //첫 번째 이미지
let slideLast = slider[sliderLength - 1]; //마지막 이미지
let cloneFirst = slideFirst.cloneNode(true); //첫 번째 이미지 복사
let cloneLast = slideLast.cloneNode(true); //마지막 이미지 복사 제이쿼리 = clone 메소드
let posInitial ="";
let dotIndex = "";
let sliderTimer = "";
let interval = 1000;
//이미지 복사 appendTo//prependYo // append//prepend
sliderInner.appendChild(cloneFirst);
sliderInner.insertBefore(cloneLast, slideFirst);
function gotoSlider(index){
sliderInner.classList.add("transition");
sliderInner.style.left = -sliderWidth * (index+1) + "px";
console.log(currentIndex);
currentIndex = index;
dotActive();
};
function dotInit(){
for(let i=0; i<sliderLength; i++){
dotIndex += "<a href='#' class='dot'></a>";
};
dotIndex += "<a href='#' class='play'></a>";
dotIndex += "<a href='#' class='stop show'></a>";
sliderDot.innerHTML = dotIndex;
sliderDot.firstElementChild.classList.add("active");
};
//닷 버튼 활성화
function dotActive(){
let dotAll = document.querySelectorAll(".slider__dot .dot");
dotAll.forEach(dot => { //전체 닷 메뉴 비활성화
dot.classList.remove("active");
});
//마지막 이미지 왔을 때
if(currentIndex == sliderLength){
dotAll[0].classList.add("active");
} else if (currentIndex == -1){
dotAll[sliderLength -1].classList.add("active");//처음 이미지 왔을 때
} else {
//현재 보고 있는 이미지 닷 활성화
dotAll[currentIndex].classList.add("active");
}
}
dotInit();
function autuPlay(){
sliderTimer = setInterval(() => {
gotoSlider(currentIndex + 1);
}, interval);
};
autuPlay();
function stopPlay(){
clearInterval(sliderTimer);
};
sliderBtnPrev.addEventListener("click", () => {
let prevIndex = currentIndex -1;
gotoSlider(prevIndex);
});
sliderBtnNext.addEventListener("click", () => {
let nextIndex = currentIndex + 1;
gotoSlider(nextIndex);
});
sliderInner.addEventListener("transitionend", () => {
sliderInner.classList.remove("transition");
if(currentIndex == -1){
sliderInner.style.left = -(sliderLength * sliderWidth) + "px";
currentIndex = sliderLength -1;
} if(currentIndex == sliderLength){
sliderInner.style.left = -(1 * sliderWidth) + "px";
currentIndex = 0;
}
});
sliderInner.addEventListener("mouseenter", () => {
stopPlay();
});
sliderInner.addEventListener("mouseleave", () => {
if(document.querySelector(".play").classList.contains("show")){
stopPlay();
} else {
autuPlay();
}
});
document.querySelector(".play").addEventListener("click", () => {
document.querySelector(".play").classList.remove("show");
document.querySelector(".stop").classList.add("show");
autuPlay();
});
document.querySelector(".stop").addEventListener("click", () => {
document.querySelector(".stop").classList.remove("show");
document.querySelector(".play").classList.add("show");
stopPlay();
});
이미지 슬라이드 사이트입니다.
강력새로고침(Ctrl + shift + R)을 하시면 올려놓은 슬라이드가 잘 실행되실거에요!
이미지에 마우스를 올리면 이미지 슬라이드가 멈추도록 만들었고 닷버튼쪽에 플레이버튼과 정지버튼을 만들었어요!
참조사이트
https://parkjongho1.github.io/webs_ho/javascript/effect/sliderEffect08.html
슬라이드 이펙트8
이미지 슬라이드 - 무한, 버튼 추가, 닷 버튼, 자동 플레이, 시작 버튼, 정지 버튼
parkjongho1.github.io
반응형
'Script Sample > SliderEffect' 카테고리의 다른 글
Slider Effect - 무한, 버튼 추가, 닷 버튼 추가 (1) | 2022.04.07 |
---|---|
Slider Effect - dot 버튼 슬라이드 (0) | 2022.02.17 |
Slider Effect - 좌우 버튼 슬라이드 (0) | 2022.02.17 |
Slider Effect - 위로 움직이기 (0) | 2022.02.17 |
Slider Effect - 연속으로 움직이는 효과 (0) | 2022.02.16 |
댓글
© 2022 babydevelop