나는 5 초마다 setInterval을 사용하여 자동으로 이미지를 변경하는 간단한 슬라이드 쇼를 가지고 있습니다.clearInterval없이 setInterval에서 타이머 재설정
사용자는 이전 및 다음 링크를 사용하여 한 이미지에서 다른 이미지로 이동할 수도 있습니다.
사용자가 이전/다음 링크를 클릭하면 타이머가 인터럽트되지 않습니다. 예를 들어, 타이머가 3 초 동안 링크를 클릭하면 다음 이미지 만 2 초간 다시 표시되어 다시 변경됩니다 .
나는 clearInterval을 사용하고 setInterval을 다시 사용하여이 작업을 수행 할 수 있음을 알고 있지만 깨끗한 방법이 있습니까?
여기 당신이 그것을 필요로하는 경우에 내 코드입니다 :
//Move to next image every 10 seconds unless paused.
var timeInterval = 5000;
var featureSlide = window.setInterval(function() { nextFeature("next")}, timeInterval);
$("a#feature-prev").click(function() {
nextFeature("prev");
return false;
});
$("a#feature-next").click(function() {
nextFeature("next");
return false;
});
function nextFeature(action) {
var idNow = $("ul#features li:visible").attr("id");
var pos = idNow.replace("feature-", "");
//If image is currently animated do nothing
//If this isn't in place then multiple images are displayed
if ($("li#" + idNow).is(":animated")) {
return;
} else {
if (pos == 4 && action == "next") {
pos = 1;
} else if (pos != 4 && action == "next") {
pos++;
} else if (pos !=1 && action == "prev") {
pos--;
} else if (pos == 1 && action == "prev") {
pos = 4
}
pos = "feature-" + pos;
// Slide to next image
$("li#" + idNow).hide("slide", { direction: "right" }, 1000, function() {
$("li#" + pos).show("slide", { direction: "left"}, 1000);
});
}
}
감사합니다!
고마워요. 사용자가 이전/다음 링크를 클릭하지 않는 한 동일한 함수가 5 초마다 호출되어야하므로 setInterval을 계속 사용한다고 생각합니다. clearInterval을 추가 한 다음 setInterval을 다시 사용하여 nextFeature가 시작될 때 타이머를 다시 시작합니다. –
@Phil : Cool. 내가 약간 당신의 코드를 오독 한 것처럼 BTW, 보인다. 'setTimeout' 접근법을 사용했다면,'show' 호출이 아닌'hide' 호출 후에 수행하기를 원할 것입니다 (미안하지만 완료 콜백에 빠졌습니다). 그렇게했다면 모든 브라우저 타이머를 해결하는 데 5 초마다 걸릴 것입니다. 하지만 애니메이션이 계속 진행되고있는 상황에서이 접근법에 대해 논쟁 할 수있는 사례를 처리해야합니다. 재미 있습니다! –