Afin d'améliorer la réponse de Karussell, cette version doit être cross-browser, gèle toutes les images, y compris celles qui ont une fin de fichier incorrecte (par exemple, les pages de chargement d'image automatisées), et n'entre pas en conflit avec la fonction de l'image originale, permettant à l'original d'être cliqué avec le bouton droit comme s'il se déplaçait.
Je le ferais détecter l'animation mais c'est beaucoup plus intensif que de simplement les congeler malgré tout.
function createElement(type, callback) {
var element = document.createElement(type);
callback(element);
return element;
}
function freezeGif(img) {
var width = img.width,
height = img.height,
canvas = createElement('canvas', function(clone) {
clone.width = width;
clone.height = height;
}),
attr,
i = 0;
var freeze = function() {
canvas.getContext('2d').drawImage(img, 0, 0, width, height);
for (i = 0; i < img.attributes.length; i++) {
attr = img.attributes[i];
if (attr.name !== '"') { // test for invalid attributes
canvas.setAttribute(attr.name, attr.value);
}
}
canvas.style.position = 'absolute';
img.parentNode.insertBefore(canvas, img);
img.style.opacity = 0;
};
if (img.complete) {
freeze();
} else {
img.addEventListener('load', freeze, true);
}
}
function freezeAllGifs() {
return new Array().slice.apply(document.images).map(freezeGif);
}
freezeAllGifs();