Quelle est la syntaxe correcte pour animer la propriété box-shadow avec jQuery?
$().animate({?:"0 0 5px #666"});
Utilisation d'Edwin Martin plugin jQuery pour l'animation d'ombres, qui étend le .animate
, vous pouvez simplement utiliser la syntaxe normale avec "boxShadow" et toutes ses facettes - color, le x- et y-offset, le blur-radius et spread-radius - s'anime. Il comprend plusieurs supports d'ombre.
$(element).animate({
boxShadow: "0px 0px 5px 3px hsla(100, 70%, 60%, 0.8)"
});
jQuery s'anime en modifiant la propriété style
des éléments DOM, ce qui peut provoquer des surprises avec spécificité et déplacer les informations de style hors de vos feuilles de style.
Je ne trouve pas les statistiques de prise en charge du navigateur pour l'animation shadow CSS, mais vous pourriez envisager d'utiliser jQuery pour appliquer une animation basée sur - classe au lieu de gérer l'animation directement. Par exemple, vous pouvez définir une animation d'ombre de boîte dans votre feuille de style:
@keyframes shadowPulse {
0% {
box-shadow: 0px 0px 10px 0px hsla(0, 0%, 0%, 1);
}
100% {
box-shadow: 0px 0px 5px 0px hsla(0, 0%, 0%, 0);
}
}
.shadow-Pulse {
animation-name: shadowPulse;
animation-duration: 1.5s;
animation-iteration-count: 1;
animation-timing-function: linear;
}
Vous pouvez ensuite utiliser l'événement natif animationend
pour synchroniser la fin de l'animation avec ce que vous faisiez dans votre code JS:
$(element).addClass('shadow-Pulse');
$(element).on('animationend', function(){
$(element).removeClass('shadow-Pulse');
// do something else...
});
Si vous utilisez jQuery 1.4.3+, vous pouvez profiter du code cssHooks qui a été ajouté.
En utilisant le crochet boxShadow: https://github.com/brandonaaron/jquery-cssHooks/blob/master/boxshadow.js
Vous pouvez faire quelque chose comme ça:
$('#box').animate({
'boxShadowX': '10px',
'boxShadowY':'10px',
'boxShadowBlur': '20px'
});
Le crochet ne vous permet pas encore d'animer la couleur mais je suis sûr qu'avec du travail qui pourrait être ajouté.
Si vous ne voulez pas utiliser de plugin, cela peut être fait avec un peu de CSS:
#my-div{
background-color: gray;
animation: shadowThrob 0.9s infinite;
animation-direction: alternate;
-webkit-animation: shadowThrob 0.9s ease-out infinite;
-webkit-animation-direction: alternate;
}
@keyframes shadowThrob {
from {box-shadow: 0 0 30px 10px rgba(190,65,12, 0.9);}
to {box-shadow: 0 0 30px 10px rgba(190,65,12, 0.2);}
}
@-webkit-keyframes shadowThrob {
from {box-shadow: 0 0 30px 10px rgba(190,65,12, 0.9);}
to {box-shadow: 0 0 30px 10px rgba(190,65,12, 0.2);}
}
/*NOTE: The animation property is not supported in Internet Explorer 9 and earlier versions.*/
Vérifiez-le: http://jsfiddle.net/Z8E5U/
Si vous voulez une documentation complète sur les animations CSS, votre chemin vers la magie commence ici ..
J'adore la solution ShaneSauce! Utilisez une classe au lieu d'un ID et vous pouvez ajouter/supprimer l'effet à n'importe quel élément à l'aide de jQuery addClass/delay/removeClass:
$('.error').each( function(idx, el){
$( el )
.addClass( 'highlight' )
.delay( 2000 )
.removeClass( 'highlight' );
});
Voici un exemple de comment le faire sans plugin: jQuery animated Box Mais il n'a pas les fonctionnalités supplémentaires qui viennent avec l'utilisation d'un plugin, mais j'aime personnellement voir (et comprendre ) la méthode derrière la folie.