본문 바로가기
j- Query

slide: basic format js

by 메씨 2023. 4. 10.
728x90
반응형

웹사이트에 자주 쓰이는 슬라이드의 가장 기본적인 코드입니다.

/*************** 글로벌 설정 *****************/
var idx											// 현재 보이는 슬라이드의 index
var zIdx										// z-index의 증가값을 저장할 변수
var slideLen								// 전체 슬라이드의 갯수
var slideLastIdx						// 마지막 슬라이드의 index
var aniSpeed								// fade animation 속도(ms)
var intervalGap							// 자동전환 interval 속도(ms)
var interval								// 자동전환 setInterval을 담는 변수
var $slideStage							// $('.slide-stage')
var $slideWrap							// $('.slide-stage .slide-wrap')
var $slide									// $('.slide-stage .slide')
var $pagerWrap							// $('.slide-stage .pager-wrap')
var $pager									// $('.slide-stage .pager')
init()

/*************** 사용자 함수 *****************/
function init() {
	// 전역변수 초기화
	idx = 0
	zIdx = 2
	slideLen = $('.slide-stage .slide').length
	slideLastIdx = slideLen - 1
	aniSpeed = 500
	intervalGap = 3000
	$slideStage = $('.slide-stage.stage1')
	$slideWrap = $slideStage.find('.slide-wrap')
	$slide = $slideStage.find('.slide')
	$pagerWrap = $slideStage.find('.pager-wrap')

	// 한번만 실행될 동작
	var html = '<i class="pager fa fa-circle"></i>'
	for(var i=0; i<slideLen; i++) {
		$(html).appendTo($pagerWrap).on('click', onPagerClick)
	}
	$pager = $pagerWrap.find('.pager')

	$slide.eq(idx).css('z-index', zIdx++)
	$pager.eq(idx).addClass('active')
	interval = setInterval(onNextClick, intervalGap)
}

function ani() {
	/**
	 *? 1.pager active 변화
	 *? 2.fade animation 진행
	*/
	$pager.removeClass('active')
	$pager.eq(idx).addClass('active')

	$slide.eq(idx).css({'opacity': 0, 'z-index': zIdx++})
	$slide.eq(idx).stop().animate({'opacity': 1}, aniSpeed)
}

/*************** 이벤트 등록 *****************/
$slideStage.find('.bt-prev').on('click', onPrevClick)
$slideStage.find('.bt-next').on('click', onNextClick)
$slideStage.on('mouseover', onStageOver)
$slideStage.on('mouseleave', onStageLeave)

/*************** 이벤트 콜백 *****************/
function onPagerClick() {
	idx = $(this).index()
	ani()
}

function onPrevClick() {
	idx = (idx === 0) ? slideLastIdx : idx - 1
	ani()
}

function onNextClick() {
	idx = (idx === slideLastIdx) ? 0 : idx + 1
	ani()
}

function onStageOver() {
	clearInterval(interval)
}

function onStageLeave() {
	interval = setInterval(onNextClick, intervalGap)
}
728x90
반응형

'j- Query' 카테고리의 다른 글

slide: horizontal(zIdx)  (0) 2023.04.10
j-Query event mouse: click(), mouseover(), mouseleave()  (0) 2023.04.10
jQuery 메서드 - 종류별 분류  (0) 2023.04.10

댓글