2012-07-07 2 views
0

나는 회전 목마를 만들고있다. (나는 거기에 플러그인이 있지만 내 자신을 만들고 싶다). 코드를 다시 실행하려면 true 또는 false 값을 반환해야하므로이 코드를 함수 내부에 배치하는 데 어려움을 겪고 있습니다.슬라이더 기능 만들기

function slider(left_indent, left_value) { 
$('#box ul').animate({'left' : left_indent}, 500,function(){ 

    $('#box li:first').before($('#box li:last'));   
    $('#box ul').css({'left' : left_value}); 

    var active = false; 
}); 

}

및이 같은 그것을 호출 시도 : : 그래서 같은 함수로 배치 TRID 한

if(!active) { 
     active = true; 
     $('#box ul').animate({ 'left': left_indent }, 500, function() { 
      $('#box li:last').after($('#box li:first')); 
      $('#box ul').css({ 'left': left_value }); 
      active = false; 
     }); 
    } 

: 지금까지 반복되는 코드가

if(!active) { 
     active = true; 
     slider(left_indent, left_value); 
    } 

내가 그 함수를 호출 할 때마다 나는 틀린 값을 반환하는 것이 좋습니다. 내가 무엇을 놓치고 있는지 확실하지 않다.

이 지금까지 내 모든 코드 :

$(function() { 
var item_width = $("#box li img").outerWidth(); 
var left_value = item_width * (-1); 

$('#box li:first').before($('#box li:last')); 
$('#box ul').css({ 'left': left_value }); 

var active = false; 
$("#next").click(function() { 
    var left_indent = parseInt($('#box ul').css('left')) - item_width; 

    if(!active) { 
     active = true; 
     $('#box ul').animate({ 'left': left_indent }, 500, function() { 
      $('#box li:last').after($('#box li:first')); 
      $('#box ul').css({ 'left': left_value }); 
      active = false; 
     }); 
    } 
    return false; 
}); 

$("#back").click(function() { 
    var left_indent = parseInt($('#box ul').css('left')) + item_width; 

    if(!active) { 
     active = true; 
     slider(left_indent, left_value); 
    } 
    return false; 
}); 

});

함수 슬라이더 (left_indent, left_value) { $ ('# 상자 UL은'() { '왼쪽'애니메이션 :. left_indent}을 500 함수() {

$('#box li:first').before($('#box li:last'));   
    $('#box ul').css({'left' : left_value}); 

    var active = false; 
}); 

}

어떤 조언을 잘 될 것입니다. 사전에 덕분에.

+0

활성 i가에 선언 전역 변수입니다 top .. 아프다. 내 코드를 호출하는 것을 보여주기 위해 내 질문을 편집한다. 아프다 또한 당신이보기에 jsfiddle을 설정해 보라. – saunders

+0

여기에 m의 jsfiddle이있다. y 현재 코드 http://jsfiddle.net/saunders1989/AvzvJ/6/ – saunders

답변

0

같은 범위에 포함되지 있었다. 이것에 대한 활성 같은 세마포어를 사용하는 exampe 작업 http://jsfiddle.net/AvzvJ/7/

그러나 그 나쁜 스타일을 참조하십시오.

+0

슬라이드 1 개만 돌아갈 수 있습니다. 멈춘다. – saunders

+0

틀린 링크 내 나쁜보기 편집 – worenga

+0

나는 거꾸로 돌아가도록 할 수 있지만, 많은 시간을 거슬러 올라가면 조금 어색해집니다. 예를 들어 이것을 참조하십시오 - http://jsfiddle.net/saunders1989/AvzvJ/8/ 다음 버튼을 클릭하면 – saunders

0

정말 유용한 콜백 함수를 반환 할 수 없습니다. 콜백 변경하기 전에 외부 함수를 활성 상태로 반환합니다. 또한 재정의/rescoped 활성있는 'var'그래서 바깥 활동을 바꾸지 않을거야. 어쨌든. 필요한 것은 공유 범위에서 활성화 된 상태에서 클릭 핸들러에서 테스트하는 것입니다.

뭔가 같은 :

var active = false; 

//assumes left_indent, left_value defined further up 
$('#slideRightBtn').click(function(){ 
    if(!active){ slider(left_indent,left_value)); } 
}); 

function slider(left_indent, left_value) { 

    //Don't use 'var' for active here 
    //that sets a new var 'active' in the scope of this func 

    active = true; 
    $('#box ul').animate({'left' : left_indent}, 500,function(){ 

     $('#box li:first').before($('#box li:last'));   
     $('#box ul').css({'left' : left_value}); 


     active = false; 
    }); 
} 
+0

답장을 보내 주셔서 감사합니다. 그건 바보 같은 실수 였어.귀하의 코드를 배치했지만 여전히 동일한 문제가 발생합니다. 클릭 기능에서 ''코드를 호출하면이 작업이 수행됩니다.$ ("# back") $ ("# back") (var left_indent = parseInt ($ ('# box ul' item_width)가 '왼쪽) +]! 경우 (능동) { 진정한 = 활성; 슬라이더 (left_indent, left_value) 은 false를 반환} ; 을}); – saunders

+0

오, NM. 반품 허위 진술의 의도가 잘못되었습니다 –

+0

괜찮습니다. 도움을 주셔서 감사합니다 – saunders

0
그냥 가지고, 외부 범위 또는 글로벌 한 변수를 수정하려면 당신은 당신의 함수 내에서 마지막 코드 줄에서 var을 놓을 수

:

function slider(left_indent, left_value) { 
$('#box ul').animate({'left' : left_indent}, 500,function(){ 

    $('#box li:first').before($('#box li:last'));   
    $('#box ul').css({'left' : left_value}); 

    active = false; // Changed! 
}); 

참고 : ...이 작업을 수행하지 마십시오. 당신이 이것을 할 수 있다는 사실 - 바깥 쪽 범위의 변수를 수정하는 것, 단지 값을 액세스하는 것뿐만 아니라 자바 스크립트에 대해 "나쁜 것"- 파이썬과 같은 "정돈 된"언어에서는 이것을 할 수 없다! LiveScript과 같은 일부 자바 스크립트 "바꾸기"는 실제로 불가능하기 때문에 (실제로는 특별한 구문을 사용해야합니다.) 불행하게도 더 인기있는 CoffeeScript는 다음과 같습니다 :(좋은 자바 스크립트 책을 선택하고 계속 진행하면 잘 구성된 코드를 작성하는 법을 배웁니다. 더 복잡한 아무것도. 활성

+0

더 나은 방법이 있습니까? – saunders

+0

바깥 쪽 범위 값을 수정해도 문제가 없습니다. 특히 일류 함수 및 클로저를 사용하는 언어로 콜백을 처리 할 때 특히 그렇습니다. –

+0

@ user720414 불행히도, 이제 막 애니메이션이 완료 될 때 호출되는 함수라는 것을 알았습니다. 예, 실제로 이벤트 처리기 또는 이벤트 처리기와 같은 것입니다. 이렇게하는 것이 실제적인 방법입니다. 가혹한 코멘트에 대해 유감스럽게 생각합니다. 처음에는'var'이 제 눈에 튀어 나오고 나머지 코드는 제대로 소화하지 않았습니다 :) – NeuronQ