2013-10-04 2 views
0

나는 이미지가 버튼을 누를 때에 따라 페이지 옆에 표시하려고하는 추적하도록되어이 작성한 코드의 조각을자바 스크립트 변수를 0으로 설정하기 혼동

$(document).ready(function(){ 
      $("#moveleft").click(function(){ 
       var negoff = "false"; 
       $("#slideshow>ul>li").animate({left: '-=' + actualwidth + 'px'}, 500); 
       $("#slideshow>ul>li:first-child").remove(); 
       offset++; 
       console.log("Offset: " + offset); 
       if(offset > 4){ 
        offset = 0; 
       } 
       if(offset < 0){ 
        offset = offset * -1; 
        negoff = true; 
       } 
       $("#slideshow>ul").append('<li><img src="images/' + 
        contentcategories[offset] + '.jpg"/></li>'); 
       $("#slideshow>ul>li:last-child").css({width: picturewidth + "px", 
        left: + 6 * actualwidth + "px"}); 
       if(negoff){ 
        offset = offset * -1; 
        negoff = false; 
       } 
      }); 
      $("#moveright").click(function(){ 
       var posoff = "false"; 
       $("#slideshow>ul>li").animate({left: '+=' + actualwidth + 'px'}, 500); 
       $("#slideshow>ul>li:last-child").remove(); 
       offset--; 
       console.log("Offset: " + offset); 
       if(offset < -4){ 
        offset = 0; 
        console.log("Offset: " + offset); 
       } 
       if(offset > 0){ 
        offset = offset * -1; 
        posoff=true; 
        console.log("Posoff: " + posoff); 
       } 
       $("#slideshow>ul").prepend('<li><img src="images/' + 
        contentcategories[(contentnum - 1) + offset] + '.jpg"/></li>'); 
       $("#slideshow>ul>li:first-child").css({width: picturewidth + "px", 
        left: + 0 + "px"}); 
       if(posoff){ 
        offset = offset * -1; 
        posoff = false; 
       } 
      }); 
     }); 

이것에 대한 혼란스러운 점은 #moveright 버튼을 두 번 연속해서 클릭하면 오프셋이 -1에서 0으로 이동하고 2 개의 값을 반복하여 순환한다는 것입니다. #moveleft 버튼과 거의 똑같은 일이 발생합니다. 그것은 0과 1의 값을 순환합니다.

오프셋 변수를 0으로 설정하는 유일한 곳은 4보다 높거나 -4보다 작아서 그 이유가 보이지 않기 때문에 혼란 스럽습니다. 2 또는 -2가 된 후 0으로 설정됩니다.

+0

jsfiddle에 대한 현실적인 예제를 제공하는 것이 좋습니다. 오프셋 조작이 코드에서 상당히 지저분하므로 100 % 무슨 일이 일어나는지 확신하기가 어렵습니다. – kasitan

+0

두 이동 기능 사이에는 많은 중복성이 있습니다. 이벤트를 부모 요소에 위임하고 클릭 이벤트를 처리하는 하나의 이동 함수 만 빌드하면 문제가 해결 될 가능성이 큽니다. – itmitica

+0

코드에서 오프셋은 어디에 초기화됩니까? – Sid

답변

1

여기서 무엇을하고 있는지 살펴 보겠습니다. 문자열을 변수에 쓰고, 변수를 부울 값으로 사용하려고합니다. 이자형. true 및 false를 반환 한 다음 if 문에서 변수가 not null인지, undefined가 아닌 false인지 확인합니다. 여기에있는 까다로운 점은 실제로 정의되어 있고 null이 아니며 문자열 ("false")입니다.

길게 짧게 : "거짓"주위를 제거하면 괜찮을 것입니다.

+0

예, 당신이 바로 그 사실을 알았습니다. 심야 코딩 ... – aoa

1

var negoff = "false";var posoff = "false";에서 인용문을 제거하십시오.

코드가 약간 리팩토링 될 수 있지만 그곳에도 존재하지 않습니다. 문제의 핵심은 "false" == true입니다. 비어 있지 않은 문자열은 자바 스크립트에서 참 값입니다. 난 그냥 오타의 가정, 그러나 여기에서 무슨 일이 일어나고 무엇 : 0에서

offset 시작 #moveLeft을 클릭하면, 그것은 그 다음에 의해 -1 if(negoff)는 사실 때문에 곱한 도착 1로 증가됩니다. 그러면 -1이되고 다음 클릭은 0으로 다시 증가합니다. 헹굼과 반복. 그 반대는 #moveRight입니다.

관련 문제