2013-03-12 15 views
7

Próbuję nauczyć się korzystać z jQuery i natknąłem się na problem. Po pierwsze, pokażę ci część kodu, która powoduje problem.jQuery kliknij, aby włączyć animację

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); 
    }); 
}); 

chcę div #nav, która początkowo jest umieszczony częściowo na zewnątrz ekranu, aby przejść w dół, gdy div #arrow_container kliknięciu. Kiedy kliknie się ponownie #arrow_container, chcę, aby #nav przesunął się w górę, do swojej pierwotnej pozycji.

W tej chwili nie dzieje się to. Czy możesz mi powiedzieć, jaki jest problem i jak mogę to naprawić?

Edycja: a jsfiddle with the code, including some css

EDIT 2: problem wydaje się być rozwiązany. Również dzięki temu ktoś, kogo nazwa użytkownika zapomniałem i odpowiedziałem, został usunięty, ale miał kilka świetnych wskazówek! Dziękuję Ci!

+0

można spróbować odtworzyć problem w jsfiddle lub dostarczyć pewną CSS lub coś, dzięki czemu możemy zobaczyć jak jesteś pozycjonowania #nav? – idrumgood

+0

Również jeśli zaczynasz uczyć się jQuery, sugerowałbym, aby nie używać przełącznika, ponieważ nie jest on już uwzględniony w najnowszych wersjach jQuery. – dev

+0

@ A.V nope, 1.8 został amortyzowany od 1.9, nie jest już wliczony w cenę. http://api.jquery.com/toggle-event/ – dev

Odpowiedz

14

Spróbuj tego:

$("#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

możesz także użyć toggleClass ("isDown") po poleceniach if, aby usunąć dodawanie i usuwanie nadmiarowości klasy –

+0

@BenSewards Dzięki, zaktualizowałem swój kod. Dodano także sugestię z Timotheus Triebl. – tsuensiu

4

dla mnie, że nie działa na 100% musiałem edytować stop() zdarzenie przed każdym ożywionej. tak:

$("#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; 
});