2010-11-04 10 views
15

Je l'extrait de code suivant qui permet de basculer le rembourrage en vol stationnaire (voir exemple here):jQuery Animer Rembourrage à zéro

<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> 

L'objectif est d'avoir le rembourrage animer à la fois dedans et dehors, mais actuellement aucune animation apparaît pour animer. J'ai fait quelques tests, et si je change le pad padding à 10 pixels (à partir de 0 pixels), il lance une animation, mais commence à zéro et s'anime à l'extérieur. Je cours jQuery 1.4.3. Aucun moyen de réparer cela?

+0

Vous ne savez pas ce qui se passe, mais ne pas animer un attribut 'marge' pour l'élément interne fonctionne à la place? –

+0

@Freek, pas si la div externe a des dimensions définies .. il pousserait les inners gauche/haut, mais il se casserait à l'extérieur de l'extérieur, comme l'extérieur ne peut pas se développer en raison des dimensions définies .. –

+0

@Gaby point pris :) –

Répondre

26

Certainement un bug d'animation en 1.4.3, pour l'instant, vous pouvez travailler autour en animant les propriétés individuelles comme celle-ci:

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

Merci Nick! Toujours apprécier vos réponses très précises. Aussi, cool outil pour les démos de code! –

+0

le bogue existe dans le sens où il ne stocke pas le remplissage après l'animation d'une façon ou d'une autre .. même si vous supprimez le mouseleave complètement, il y a un problème lorsque vous ré-entrez le div. L'animation recommence .. –

+0

@Gaby -Je pense que c'est causé par le déplacement de la position de la souris, je ne sais pas pourquoi on l'enlève quand même ... Je vais prendre un peu de sommeil ou de café ici, puis voir où se passe –

5

Cela ressemble à un bogue dans 1.4.3 (partie css réécrite). 1.4.2 fonctionne très bien:

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

je vais étudier davantage et mettre à jour ce post.

+0

Merci Andy. J'apprécie la confirmation que c'est un bug! –

0

Je viens de réaliser jquery ne réagit pas très bien à des traits d'union « - » au sein de l'animation, mais vous obtenez le même résultat en obtenant tour de la trait d'union et en capitalisant la première lettre après. Donc, pour vous aurez quelque chose comme ceci:

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

}, slow);