2015-01-14 4 views
1

메뉴 버튼을 누를 때 왼쪽에서 열리고 닫히는 사이드 메뉴를 만들려고합니다. CSS, html 코드가 올바르게 실행되고 있지만 스크립트가 잘못되어 있는지 파악할 수 없습니다. 그것은 단 한 번만 완벽하게 작동합니다 : 메뉴 버튼을 누르면 다시 나오고 의도대로 돌아갑니다. 문제는 내가 그것을 다시 누르면 그것을 보여주고 그 자체로 돌아 간다. 누구든지 나를 도울 수 있습니까? 이 여러 번 실행됩니다, 그래서 당신은 클릭 핸들러 내부의 클릭 핸들러를 배치 한한 번만 실행되는 스크립트

$(document).ready(function(){ 

$('.menu-icon').click(function(){ 
    $('#navigator').animate({left:'0px'},200); 
    $(this).animate({left:'250px'},200); 
    $('.menu-icon').click(function(){ 
     >$('#navigator').animate({left:'-250px'},200); 
     >$(this).animate({left:'0px'},200); 
}); 
}); 
>}); 
+0

에서

또는 사용 전환의 일이 사용 JQuery와 당신은 클릭 핸들러 * 내부 * 기존의 클릭 핸들러를 바인딩하는 이유를 클릭 한 후 정상 하나 하나는, 이잖아. 따라서 두 번째 클릭시 두 핸들러가 실행되고 * third *가 바인딩됩니다. 세 번째 클릭시 모두 세 개가 실행되고 * 네 번째 *가 바인딩됩니다. – nnnnnn

+0

일반적인 가이드로서 클릭 이벤트 핸들러에 이벤트 핸들러를 등록 할 필요는 거의 없습니다 (대신 이벤트 핸들러를 켜고 끌 때). –

답변

3

: 여기 내 스크립트입니다. 처음 두 번, 세 번, 네 번 등

의 현재 상태를 기반으로 단일 처리기를 사용하고 에 애니메이션을 적용하는 방법을 결정해야합니다. 예 : (하지 테스트) 다음과 같은 : 나는 당신이 테스트 CSS의 값으로 요소를 전환 클래스를 사용하여 "현재 상태를"테스트 제안

$(document).ready(function() { 

    $('.menu-icon').click(function() { 
     if ($('#navigator').css("left") != "0px") { 
      $('#navigator').animate({ 
       left: '0px' 
      }, 200); 
      $(this).animate({ 
       left: '250px' 
      }, 200); 
     } else { 
      $('#navigator').animate({ 
       left: '-250px' 
      }, 200); > $(this).animate({ 
       left: '0px' 
      }, 200); 
     } 
    }); 
}); 

애니메이션 동안 악명 신뢰할 수없는 것입니다.

다음과 같음 :

if ($('#navigator').toggleClass("open").hasClass("open")) { 
+0

대단히 감사합니다! 그것은 효과가 있었다. 하나의 수정 : if ($ ('# navigator') .css ("left") == "-250px") (숨겨진 메뉴가 시작됨). – Iulius

+0

업데이트 할 수 있도록 모든 수정 사항을 알려주십시오. 두 번째 옵션을 권하고 싶습니다. –

+0

방금 ​​jquery를 배우기 시작했습니다. 나중에 두 번째 방법을 시도하기 위해 연구를 수행 할 것입니다. 다시 한번 감사드립니다. 추신 : 나는 충분한 점수가 없기 때문에 대답을 upvote 수 없습니다. 나는 답을 고마워 할 때만 선택할 수 있습니다. 편집 : 그것은 함께 작동합니다! = 0px 너무. – Iulius

0

여기에서 클릭 이벤트 수신기를 두 번 연결합니다. 이 방법

$(document).ready(function(){ 

    $('.menu-icon').click(function(){ 
    var navigator = $('#navigator'); 
    if(navigator.offset().left == 0) 
    { 
     navigator.animate({left:'-250px'},200); 
     $(this).animate({left:'0px'},200); 
    } 
    else 
    { 
     navigator.animate({left:'0px'},200); 
     $(this).animate({left:'250px'},200); 
    } 

    }); 
}); 
+0

jQuery에는 left() 메소드가 없습니다. –

+0

도움이되지 않는 편집 ... jQuery에는 여전히 'left()'메소드가 없습니다 ... –

+0

감사합니다. 오프셋()을 사용합니다. 왼쪽 –

관련 문제