2014-10-30 11 views
6

Tworzę menu, które pojawia się po kliknięciu łącza i próbuję użyć animacji jQuery(); funkcja, aby go wsunąć, a nie tylko pojawiać się.jQuery animate() działa tylko na drugim kliknięciu

Problem, który mam, polega na tym, że wydaje się tylko aktywować przesuwający się bit przy drugiej próbie, chociaż wydaje się, że robi to pauzę 500 ms, jak gdyby było.

Widziałem kilka innych pytań na ten temat, ale odpowiedź brzmi: "masz konkretny błąd w kodzie" lub "musisz przełączyć lub w inny sposób udawać animację podczas ładowania strony". Mam nadzieję, że mój kod jest bezbłędny i naprawdę nie lubię używać przełącznika hakerskiego, by ominąć pierwszy niepokazujący się animację.

Przypuszczalnie ma to działać po raz pierwszy & co drugi czas, więc moje pytanie brzmi: Jak uzyskać animację do pracy po raz pierwszy bez poprawki onload/hack?

HTML

<section id="mover"> 
    <div class="menu_Content"> 
    <div class="menu_close"> 
     <a href="#" id="closeMenu">close menu</a> 
    </div> 
    <h5><a href="/">[menu link]</a></h5> 
    <h5><a href="/">[menu link]</a></h5> 
    <h5><a href="/">[menu link]</a></h5> 
    <h5><a href="/">[menu link]</a></h5> 
    <h5><a href="/">[menu link]</a></h5> 
    <h5><a href="/">[menu link]</a></h5> 
    <h5><a href="/">[menu link]</a></h5> 
    </div> 
</section> 
<div class="core home"> 
    <header> 
    <div class="menu_link"> <a href="#" id="openMenu">[menu]</a></div> 
    </header> 
    <div class="content"> 
    <h1 class="big-head">[headline one]</h1> 
    <p>[some content]</p> 
    </div> 
</div> 

CSS

#mover { 
    background:rgba(47, 47, 47, 1); 
    min-height: 100%; 
    position: absolute; 
    z-index: 2; 
    right: 100%; 
    overflow: hidden; 
    display: none; 
    width: 100%; 
    right: 0%; 
} 
#mover a { 
    width: 100px; 
    height: 60px; 
    color: #fff; 
    text-decoration: none; 
    display: block; 
    padding-top: 10px; 
} 
#mover .menu_close { 
    width: 100px; 
    height: 60px; 
    background: #FF7466; 
    color: #fff; 
    text-align: center; 
} 

JS/jQuery

//menu open 
jQuery('#openMenu').click(function (event) { 
    event.preventDefault(); 
    jQuery('#mover') 
     .animate({ 
     right: '0%' 
    }, 500, function() { 
     jQuery('#mover').show(); 
    }); 
}); 
//menu close 
jQuery('#closeMenu').click(function (event) { 
    event.preventDefault(); 
    jQuery('#mover').animate({ 
     right: '100%' 
    }, 500); 
}); 

Oto skrzypce: http://jsfiddle.net/tymothytym/05gu7bpr/4/

Dzięki!

+1

+1. Wszystkie pytania SO powinny być sformułowane w ten sposób. Czy zastanawiasz się nad przejściem CSS? Nie odpowiada to na twoje pytanie, ale jest często moim preferowanym podejściem do animacji opartej na przeglądarce. –

+0

Chcę, żeby działało tylko na kliknięcie, więc JS wydawało się być drogą, jestem otwarty na dowolne rozwiązanie i generalnie wolę opcję CSS. Co to jest pytanie SO? – tymothytym

+0

Pytanie StackOverflow. Napiszę rano alternatywę CSS dla ciebie. Ale w zasadzie przełączasz klasę z jQuery. Jedna klasa będzie miała "right: 0%;", a druga będzie miała "right: 100%". Przyciągnie to teraz kliknięcie (oczywiście), ale wtedy definiujesz przejście w następujący sposób: 'transition: all 3s ease;'. "Wszystko" oznacza, że ​​jakakolwiek różnica w właściwościach CSS będzie animowana tam, gdzie jest to możliwe, mógłbyś po prostu mieć "prawo", ale zakładam, że możesz chcieć się z nim bawić, więc zostawiłeś "wszystko". UWAGA: Sprawdź '-webkit "ekwiwalenty atrybutów przejścia itp. –

Odpowiedz

4

Zmień #mover CSS do tego:

#mover { 
    background:rgba(47, 47, 47, 1); 
    min-height: 100%; 
    position: absolute; 
    z-index: 2; 
    right: 100%; 
    overflow: hidden; 
    display: block; 
    width: 100%; 
} 

DEMO

+0

a ty ogólny kod jak: http: // jsfiddle.net/05gu7bpr/6/ –

+0

Pocałuj to. Więc to był błąd, więcej praktyki w sprawdzaniu wymaganych ... fantazyjne wprowadzanie w dwa razy * jęk *. – tymothytym

0

http://jsfiddle.net/desmo/05gu7bpr/5/

Przedstawienie stało po animacji pierwszego kliknięcia

poprawiłam css i js

css:

#mover { 
    background:rgba(47, 47, 47, 1); 
    min-height: 100%; 
    position: absolute; 
    z-index: 2; 
    right: 100%; 
    overflow: hidden; 
    width: 100%; 
} 
#mover a { 
    width: 100px; 
    height: 60px; 
    color: #fff; 
    text-decoration: none; 
    display: block; 
    padding-top: 10px; 
} 
#mover .menu_close { 
    width: 100px; 
    height: 60px; 
    background: #FF7466; 
    color: #fff; 
    text-align: center; 
} 

JS:

//menu open 
jQuery('#openMenu').click(function (event) { 
    event.preventDefault(); 
    jQuery('#mover') 
     .animate({ 
     right: '0%' 
    }, 500); 
}); 
//menu close 
jQuery('#closeMenu').click(function (event) { 
    event.preventDefault(); 
    jQuery('#mover').animate({ 
     right: '100%' 
    }, 500); 
}); 
Powiązane problemy