저는 작업중인 슬라이더에 jQuery와 바닐라 자바 스크립트 조합을 사용하고 있습니다. 아마도 이것을 하나의 jQuery 플러그인에 넣으려고했지만 jQuery 플러그인에 대한 지식이 부족하고 아직 배울 필요가 없습니다.글로벌 settimeout 변수 만들기
내가 겪은 문제점은 내 settimeout 변수가 jQuery와 바닐라 기능에서 전역 적이 지 않은 것입니다.
특정 상황에서 시간 제한을 지울 수 있어야하므로 문제가됩니다. 예 : 사용자가 탐색 버튼이나 화살표를 클릭하면 현재 시간 초과를 지우고 다시 시작해야합니다.
$(document).ready(function() {
/* slider */
if ($('.slider').length)
{
// setttings
$caption_speed = 500;
$slide_speed = 5000;
// get slider height (px)
$height = $('.slider .slides').outerHeight();
// set top of all captions to slider height so they can be animated upwards
$('.slider .slides li .caption').css('top', $height+'px');
// get total slides
$slides = $('.slider .slides li').length - 1;
$active = 0;
// show first slide caption
captionActive($active, $caption_speed);
$timeout = setTimeout(function() { nextSlide('right', $slides, $height, $caption_speed, $slide_speed, 'null'); }, $slide_speed);
// pause slider if person mouses over caption, arrows, or nav
$('.slider .slides li .caption, .slider .slide-arrows li, .slider .slide-nav').mouseover(function() {
clearTimeout($timeout);
});
$('.slider .slides li .caption, .slider .slide-arrows li, .slider .slide-nav').mouseout(function() {
$timeout = setTimeout(function() { nextSlide('right', $slides, $height, $caption_speed, $slide_speed, 'null'); }, $slide_speed);
});
// do arrow actions when clicked
$('.slide-arrows li').click(function() {
$direction = $(this).attr('class');
nextSlide($direction, $slides, $height, $caption_speed, $slide_speed, 'null');
});
// do nav actions when clicked
$('.slider .slide-nav li').click(function() {
$number = $(this).index();
nextSlide('right', $slides, $height, $caption_speed, $slide_speed, $number);
});
}
});
function captionActive (active, caption_speed)
{
$caption = $('.slider .slides li:eq('+active+') .caption');
$cheight = $caption.outerHeight();
$top = ($height - $cheight)/2;
$caption.animate({opacity: 1, top: $top}, caption_speed, function() {});
$('.slider .slide-nav li:eq('+active+')').addClass('active');
}
function nextSlide (direction, slides, height, caption_speed, slide_speed, next)
{
clearTimeout($timeout);
// get active slide #
$active = $('.slider .slide-nav .active').index();
$active_slide = $('.slider .slides li:eq('+($active)+')');
$('.slider .slide-nav .active').removeClass('active');
if (next != 'null')
$next = next;
else if (direction == 'left')
$next = $active - 1;
else
$next = $active + 1;
// check if next exists, otherwise make first next
if (!$('.slider .slides li:eq('+($next)+')').length)
$next = 0;
$next_slide = $('.slider .slides li:eq('+($next)+')');
$next_slide.css('z-index', '99');
// fade out caption
$caption = $('.slider .slides li:eq('+$active+') .caption');
$caption.animate({opacity: 0, top: height}, caption_speed, function() {});
$active_slide.animate({opacity: 0}, caption_speed, function() {
$active_slide.css({'z-index' : '0', 'opacity' : '100'});
$next_slide.css('z-index', '100');
// fade in new caption & set nav element active
captionActive($next, caption_speed);
$timeout = setTimeout(function() { nextSlide('right', slides, height, caption_speed, slide_speed, 'null'); }, slide_speed);
});
}
가 nextSlide의 함수 내에서 다음 줄을 참조하십시오 :
clearTimeout($timeout);
이 시간 제한을 취소하지 않는 것 여기
는 코드입니다..slide-arrows li
또는
.slider .slide-nav li
을 클릭하면 시간 초과가 스태킹 된 것처럼 보입니다.
도움을 주시면 감사하겠습니다.