2013-03-12 3 views
7

Я пытаюсь узнать, как использовать jQuery, и я наткнулся на проблему. Прежде всего, я покажу вам часть кода, которая вызывает проблему.jQuery click toggle animation

HTML

<div id="nav"> 
<div id="button"><p class="scroll" onclick="location.href='#ed';">Education</p></div> 
<div id="button"><p class="scroll" onclick="location.href='#wxp';">Work Experience</p></div> 
<div id="button"><p class="scroll" onclick="location.href='#oact';">Other Activities</p></div> 
<div id="button"><p class="scroll" onclick="window.open('cv.pdf','mywindow');">View as PDF</p></div> 
<div id="arrow_container"><div class="arrow" id="down"></div></div> 

JQuery

$(document).ready(function(){ 
$("#arrow_container").toggle(
    function() { 
    $("#nav").animate({marginTop:"0px"}, 200); 
     }, function() { 
    $("#nav").animate({marginTop:"-100px"}, 200); 
    }); 
}); 

Я хочу DIV #nav, который изначально позиционируется частично за пределами экрана, чтобы переместить вниз при ДИВЫХ #arrow_container кнопке. Затем, когда снова щелкнули #arrow_container, я хочу, чтобы #nav переместился вверх, в исходное положение.

В настоящий момент это не происходит. Можете ли вы рассказать мне, в чем проблема, и как я могу это исправить?

РЕДАКТИРОВАТЬ: a jsfiddle with the code, including some css

EDIT 2: Проблема, кажется, решена. Также благодаря кому-то, чье имя пользователя я забыл и ответ, было удалено, но у него были отличные советы! Спасибо!

+0

Вы можете попытаться воссоздать проблему в jsfiddle, или предоставить некоторые CSS или что-то, чтобы мы могли видеть, как вы позиционирование #nav? – idrumgood

+0

Также, если вы начинаете изучать jQuery, я бы предложил не использовать toggle, поскольку он больше не включен в последние версии jQuery. – dev

+0

@ A.V nope, 1.8 был амортизирован с 1,9, он больше не включается. http://api.jquery.com/toggle-event/ – dev

ответ

14

Попробуйте это:

$("#arrow_container").click(function(event){ 
    event.preventDefault(); 
    if ($(this).hasClass("isDown")) { 
     $("#nav").stop().animate({marginTop:"-100px"}, 200);        
    } else { 
     $("#nav").stop().animate({marginTop:"0px"}, 200); 
    } 
    $(this).toggleClass("isDown"); 
    return false; 
}); 

http://jsfiddle.net/us6sohyg/5/

+0

вы также можете использовать toggleClass ('isDown') после операторов if для удаления добавления и удаления избыточности класса –

+0

@BenSewards Спасибо, я обновил свой код. Также добавлено предложение от Тимофея Трибеля. – tsuensiu

4

для меня это не сработало на 100% я должен был изменить стоп() событие перед каждым одушевленных. так:

$("#arrow_container").click(function(event){ 
event.preventDefault(); 
if ($(this).hasClass("isDown")) { 
    $("#nav").stop().animate({marginTop:"0px"}, 200);   
    $(this).removeClass("isDown"); 
} else { 
    $("#nav").stop().animate({marginTop:"-100px"}, 200); 
    $(this).addClass("isDown"); 
} 
return false; 
});