Tout d'abord, regardez cette image
Gmail utilise cette image pour afficher l’émoticône animée.
Comment pouvons-nous montrer une telle animation en utilisant une image png?
Je vous laisse un dur exemple pour que vous puissiez obtenir un point de départ:
Je vais utiliser un élément div simple, avec les width
et height
que l'image animée aura, le png Sprite en tant que background-image
et background-repeat
défini sur no-repeat
CSS nécessaire:
#anim {
width: 14px; height: 14px;
background-image: url(https://ssl.gstatic.com/ui/v1/icons/mail/im/emotisprites/wink2.png);
background-repeat: no-repeat;
}
Balisage nécessaire:
<div id="anim"></div>
L'astuce consiste essentiellement à faire défiler l'image d'arrière-plan vers le haut, en utilisant la propriété CSS background-position
.
Nous avons besoin de connaître la height
de l'image animée (pour savoir combien de fois nous allons défiler vers le haut) et combien de fois faire défiler (combien de images auront l'animation).
Implémentation de JavaScript:
var scrollUp = (function () {
var timerId; // stored timer in case you want to use clearInterval later
return function (height, times, element) {
var i = 0; // a simple counter
timerId = setInterval(function () {
if (i > times) // if the last frame is reached, set counter to zero
i = 0;
element.style.backgroundPosition = "0px -" + i * height + 'px'; //scroll up
i++;
}, 100); // every 100 milliseconds
};
})();
// start animation:
scrollUp(14, 42, document.getElementById('anim'))
EDIT: Vous pouvez également définir les propriétés CSS par programme afin de ne définir aucun style sur votre page et créer une fonction constructeur à partir de l'exemple ci-dessus, qui vous permettra d'afficher plusieurs animations Sprite simultanément:
Utilisation:
var wink = new SpriteAnim({
width: 14,
height: 14,
frames: 42,
Sprite: "https://ssl.gstatic.com/ui/v1/icons/mail/im/emotisprites/wink2.png",
elementId : "anim1"
});
var monkey = new SpriteAnim({
width: 18,
height: 14,
frames: 90,
Sprite: "https://ssl.gstatic.com/ui/v1/icons/mail/im/emotisprites/monkey1.png",
elementId : "anim4"
});
La mise en oeuvre:
function SpriteAnim (options) {
var timerId, i = 0,
element = document.getElementById(options.elementId);
element.style.width = options.width + "px";
element.style.height = options.height + "px";
element.style.backgroundRepeat = "no-repeat";
element.style.backgroundImage = "url(" + options.Sprite + ")";
timerId = setInterval(function () {
if (i >= options.frames) {
i = 0;
}
element.style.backgroundPosition = "0px -" + i * options.height + "px";
i++;
}, 100);
this.stopAnimation = function () {
clearInterval(timerId);
};
}
Notez que j’ai ajouté une méthode stopAnimation
. Vous pourrez ainsi arrêter ultérieurement une animation spécifiée simplement en l’appelant, par exemple:
monkey.stopAnimation();
Vérifiez l'exemple ci-dessus ici .
La réponse de CMS est correcte, mais il existe également le format APNG (fichier PNG animé) que vous souhaiterez peut-être utiliser à la place. Bien sûr, la première image (celle affichée même par les navigateurs qui ne prennent pas en charge APNG) devrait être l’image "de fin" et spécifier simplement de sauter la première image du fichier.
Regarde ça:
http://www.otanistudio.com/swt/Sprite_explosions/ et http://www.alistapart.com/articles/sprites La réponse est intérieure.
Vous pouvez le faire avec TweenMax et steppedEase easing: http://codepen.io/burnandbass/pen/FfeAa ou http://codepen.io/burnandbass/pen/qAhpj comme vous le souhaitez :)
Définissez l'image d'arrière-plan d'un élément sur la première image, puis utilisez javascript pour modifier l'image en modifiant le style toutes les x millisecondes.
CSS @keyframes peut être utilisé dans ce cas
@keyframes smile {
0% { background-postiion: 0 -16px;}
5% { background-postiion: 0 -32px;}
10% { background-postiion: 0 -48px;}
/*...etc*/
}