2010-11-04 17 views
15

Mam następujący fragment kodu, który przełącza wyściółkę po najechaniu (patrz przykład here):jQuery Animacja wyściółka Zero

<div id="outer"><div id="inner"></div></div> 
<script> 
    $("#inner").mouseenter(function() { 
    $("#outer").animate({ 'padding' : '20px' }, "slow"); 
    }); 
    $("#inner").mouseleave(function() { 
    $("#outer").animate({ 'padding' : '0px' }, "slow"); 
    }); 
</script> 

Celem jest mieć wyściółka animować zarówno wewnątrz jak i na zewnątrz, jednak obecnie nie pojawia się animacja dla animowanie. Zrobiłem kilka testów, a jeśli zmienię padding na 10 pikseli (z 0 pikseli), uruchamia animację, ale zaczyna się od zera i animuje na zewnątrz. Używam jQuery 1.4.3. Jakikolwiek sposób to naprawić?

+0

Nie jesteś pewien, co się dzieje, ale zamiast animować atrybut 'margin' zamiast wewnętrznego elementu? –

+0

@Freek, nie, jeśli zewnętrzny div ma zdefiniowane wymiary .. to popchnie wewnętrzną lewą/górną, ale pęknie poza zewnętrzną, ponieważ zewnętrzna nie może się rozwinąć ze względu na zdefiniowane wymiary .. –

+0

@Potrafię zrobić punkt :) –

Odpowiedz

26

Zdecydowanie bug animacja w 1.4.3, na razie można obejść poprzez animowanie indywidualne właściwości, takie jak ten:

$("#inner").mouseleave(function() { 
    $("#outer").animate({ 
    'padding-top' : 0, 
    'padding-right' : 0, 
    'padding-bottom' : 0, 
    'padding-left' : 0, 
    }, "slow"); 
}); 

You can test it out here.

+0

Dzięki Nick! Zawsze doceń swoje bardzo precyzyjne odpowiedzi. Również fajne narzędzie do dema kodu! –

+0

Błąd istnieje w tym sensie, że nie zachowuje wypełnienia po animacji w jakiś sposób. Nawet jeśli usuniesz całkowicie kółko myszy, pojawia się problem przy ponownym wprowadzaniu elementu div. Animacja zaczyna się od ... –

+0

@Gaby -Myślę, że to spowodowane przesunięciem pozycji myszy do niej, nie wiem, dlaczego w ogóle jest ona usuwana ... Spokojnie się tu dostanę, a potem zobaczę, gdzie to jest dzieje się tak –

5

Wygląda jak błąd w 1.4.3 (przepisana część css). 1.4.2 działa dobrze:

http://www.jsfiddle.net/YjC6y/44/

będę je badać dalej i aktualizować ten post.

+0

Dzięki Andy. Doceniam potwierdzenie, że to błąd! –

0

Właśnie uświadomiłem sobie, jquery nie reaguje bardzo dobrze na myślniki „-” w animacji, ale uzyskać ten sam rezultat poprzez uzyskanie Jadą z łącznikiem i wielką literą po. Tak więc będziesz miał coś takiego:

$("#inner").mouseleave(function() { 
     $("#outer").animate({ 
    paddingTop : 0, 
     paddingRight : 0, 
     paddingBottom : 0, 
     paddingLeft : 0, 
     borderLeftWidth: 0, 
     borderTopWidth: 0, 
     borderRightWidth: 0, 
     borderBottomWidth: 0, 

}, slow);