2014-11-04 2 views
1

이미지 갤러리를 만들고 있는데 for 루프를 사용하여 모든 이미지를로드하고 있습니다. 하지만 지금은 문제가 발생하여 매번 루프가 지연되기를 원합니다.Jquery에서 for 루프를 지연하는 방법

시간 제한을 설정하려고했지만 작동하지 않습니다.
누군가 Jquery를 사용하여 루프를 지연시키는 방법을 알고 있습니다.

JS 코드 :

function test(){ 
var src = 'img/nature/'; 
var img = ['1.jpg']; 
var image = [ "1.jpg", "2.jpg", "3.jpg",'4.jpg','5.jpg','6.jpg','7.jpg' ]; 
    for (var i = 0; i < image.length; i = i + 1) { 
    $('#frame').append('<img class="tile hide" src="'+src + image[ i ]+ '">'); 
    $('.hide').show(500); 
     setTimeout(function(){ 

     },500); 
    } 

} 

그리고 나는 다른 질문이 있습니다. Jquery를 사용하여 폴더에있는 모든 imags를로드 할 수 있습니까?

+3

두 번째 질문 : 아니오, js는 OS 및 클라이언트 폴더 또는 시스템에 액세스 할 수 없습니다. –

+0

어쨌든 더 정확한'setInterval'을 사용하십시오. 그리고 루프 대신 jquery'each'를 사용하십시오. –

+0

폴더에서 이미지를로드하는 경우 실제로 클라이언트 폴더 시스템에서 이미지를로드합니다. – Vinc199789

답변

1

당신이 시도 할 수 있습니다 : 무엇이든에 마지막

function test() { 
    var src = 'img/nature/'; 
    var img = ['1.jpg']; 
    var image = [ '1.jpg', '2.jpg', '3.jpg','4.jpg','5.jpg','6.jpg','7.jpg' ]; 

    setInterval(function() { 
     $.each(image, function(index, value) { 
      $('#frame').append('<img class="tile hide" src="'+src + value + '">'); 
      $('.hide').show(500); 
     }); 
    }, 500); 
} 

변경 500 ...

그러나 나는 이것이 당신이하고 싶은 것이 아니라고 생각합니다 ... 아래 접근법은 당신이 원하는 것일 수 있습니다 :

function test() { 
    var src = 'img/nature/', 
     img = ['1.jpg'], 
     image = [ '1.jpg', '2.jpg', '3.jpg','4.jpg','5.jpg','6.jpg','7.jpg' ], 
     maxIndex = (image.length - 1), 
     cIndex = 0; 

    setInterval(function() { 
     if (cIndex == maxIndex) 
      cIndex = 0; 
     $('#frame').append('<img class="tile hide" src="'+src + image[cIndex] + '">'); 
     $('.hide').show(500); 
     cIndex++; 
    }, 500); 
} 
2

대신 루프를 사용하는 재귀 기능을 사용할 수 있습니다

var src = 'img/nature/'; 
var img = ['1.jpg']; 
var image = [ "1.jpg", "2.jpg", "3.jpg",'4.jpg','5.jpg','6.jpg','7.jpg' ]; 
var i = 0; 
var showGallery = function(){ 
    $('#frame').append('<img class="tile hide" src="'+src + image[ i ]+ '">'); 
    $('.hide').show(500); 
    i++; 
    if (i<image.length){ 
     setTimeout(showGallery,500); 
    } 
}; 

if (image.length > 0){ 
    showGallery(); 
} 
+0

내 직감은 쓰레기 수거되지 않을 무한 수의 스택 프레임을 할당 할 것이라고 내 직감을 말해줍니다 ... – Ziggy

+0

재귀 함수는 값을 반환하지 않습니다. 그래서 저는 이것이 스택이 필요하다고 생각하지 않습니다. 나는 js 스케쥴러가 다른 이벤트를 스케쥴하는 것과 동일한 방식으로이 함수 호출을 스케쥴 할 수 있다고 생각한다. –

+2

나는 틀렸다! 또한 실제로 재귀가 아닙니다. setTimeout은 이벤트를 예약하므로 showGallery 함수는 호출 될 때마다 실제로 완료까지 실행됩니다. 그 다음에 콘솔 로그 명령문을 넣으면 블록을 볼 수 있습니다. http://jsfiddle.net/0a6ssfpL/ 재귀 함수에서 로그 명령문은 모두 끝에 있습니다. 이 코드에서 로그 문은 간격 다음에 한 번에 하나씩옵니다. – Ziggy

1

슬라이드 쇼는 500 밀리 초 동안 만 사용됩니다. 그 값을

에서 늘리십시오.

setTimeout (function() {}, 500); 슬라이드 쇼가 지연됩니다.

& 루프 내에서 기능 테스트를 호출하면 슬라이드 쇼가 계속됩니다.

샘플 :

함수 slideit() {

if (!document.images) 
return 0 
document.images.slide.src=eval("image"+step+".src") 
if (step<3) 
step++ 
else 
step=1 

setTimeout("slideit()",3000) 

}

+1

사실, 당신은 요점을 놓치고있다. 이 질문은 비동기 콜백에 관한 것입니다. OP가 제공 한 예제 코드에서 for 루프는 즉시 끝까지 실행됩니다. 그런 다음 500 밀리 초 후에 모든 setTimeout 콜백이 동시에 실행됩니다. 어떤 번호를 사용하던간에, 이것은 항상 발생합니다. 이 바이올린을 확인하십시오 : http://jsfiddle.net/xL8rjpyx/ 콘솔의 출력을보십시오. 왜 이런 일이 일어 났는지 이해합니까? 그것은 나를 위해 일한 – Ziggy

+0

.... 기능 slideit() { \t 경우 (! document.images) \t 반환 \t document.images.slide.src = 평가 ("이미지"+ 단계 + ". SRC ") \t 경우 (단계 <3) \t 단계 ++ 다른 \t \t 단계 = 1 \t의 setTimeout ('slideit()", 3000)} –

0

다른 방법은 타임 아웃 이벤트에 대한 시간 값을 증가 일시적인 범위를 사용하는 것이다 ..

function test(){ 
    var src = 'img/nature/'; 
    var img = ['1.jpg']; 
    var image = [ "1.jpg", "2.jpg", "3.jpg",'4.jpg','5.jpg','6.jpg','7.jpg' ]; 
    for (var i = 0; i < image.length; i++) { 
     (function(i){ 
      setTimeout(function(){ 
       $('#frame').append('<img class="tile hide" src="'+src + image[ i ]+ '">'); 
       $('.hide').show(500); 
      }, 500*i); 
     })(i); 
    } 
} 
관련 문제