2016-09-09 4 views
0

I는 다음과 같이 작성하면 잘 작동 스크립트했습니다 :숨기고 계시 된 div

var isPaused = false, 
jQuery(function() { 
    var $els = $('div[id^=film]'), 
     i = 0, 
     len = $els.length; 

    $els.slice(1).hide(); 
    setInterval(function() { 
     if (!isPaused) { 
      if (len > 1) { 
       $els.eq(i).fadeOut(function() { 
        i = (i + 1) % len; 
        $els.eq(i).fadeIn(); 
        }); 
      } 
     } 
    }, 3500); 
}); 

을하지만 내가 일 것이라고 생각 그래서 다음과 같이 재 작성 다음 및 이전 단추를 추가하고 싶었다.

var isPaused = false, 
    $els = $('div[id^=film]'), 
    i = 0, 
    len = $els.length; 

    $els.slice(1).hide(); 
    setInterval(Slide(1), 3500); 

function Slide (x) { 
    if (!isPaused) { 
     if (len > 1) { 
      $els.eq(i).fadeOut(function() { 
       i = (i + x) % len; 
       if (i<0) { 
        i = len; 
       } 
       $els.eq(i).fadeIn(); 
       }); 
     } 
    } 
} 

$('#next').click(Slide(1)); 
$('#prev').click(Slide(-1)); 

그러나 페이지에 아웃을 페이드 또는 다음 및 이전 버튼이 작동하는 것을 허용하지 않습니다 다음로드 될 때이 코드는 단지 모든 div의 표시된다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

업데이트 아마도이 질문을해야합니다. 첫 번째 코드 블록이 주어지면 Prev 및 Next 버튼을 사용하려면 어떻게 변경해야합니까?

+0

을 도움이되기를 바랍니다. (정의되지 않은 클릭)'<- 예, 정확히 그런 것입니다. 아무 것도하지 않는 것이 당연합니다. – adeneo

+0

익명 기능을 사용하십시오. var Slide = function (x) {} – dharmesh

+0

콘솔에 문제가 있습니까? – RPichioli

답변

1

당신은하고 싶지 :

$('#next').click(function(){Slide(1);}); 
$('#prev').click(function(){Slide(-1);}); 

대신

setInterval(function(){Slide(1);}, 3500); 

는, 현재의 코드로, Slide(1) 이미 계산되고 있으며, 클릭 기능은 값이에서 반환 된 호출 (함수에 반환 값이 없기 때문에 정의되지 않습니다.)

함수를 Slide로 랩핑하면 클릭이 해당 함수를 호출하고,

if (i<0) { 
    i = len - 1; 
} 
+0

고마워, 해봤지만 아무런 차이가 없다. – HenryM

+0

@HenryM setInterval에 대한 익명 함수와 슬라이드 함수에 대한 문제가 필요하다는 것을 알게되었다. 이건 내 피들에서 작동하는 것 같다. – StephenTG

+0

버튼을 클릭 할 때 모든 div가 하나씩 이동하고 이동하지 않기 때문에 나에게 바이올린을 보여줄 수 있습니까? – HenryM

0

당신의 jQuery 이벤트 콜백을 : 차례로 호출

당신은 또한 당신이 제로 인덱스 배열을 처리하고 당신이 아니라 len보다는, 부정적인 가면 len - 1에 색인을 설정하려면 슬라이드하는 같은 부하 구조 안에 있어야합니다 :

// Wait for DOM load 
$(document).ready(function() { 
    $('#next').click(function(){ Slide(1); }); 
    $('#prev').click(function(){ Slide(-1); }); 
}); 

그리고 난 당신이 변경 제안하고 싶은 당신 :

setInterval(Slide(1), 3500); 

setInterval(function() { 
    Slide(1); 
}, 3500); 

는 기능은`$을하고있는, 전혀 ('다음 #')를 아무것도 반환하지 않습니다`) (은`슬라이드로 보는