So, I thought a little about it ... You could do something cool:
First break the gif into multiple images and then leave them using css keyframes.
#faux-gif { position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto; background-image: url(http://i.imgur.com/E2ee6fI.gif); background-repeat: no-repeat; background-attachment: fixed; background-position: center; width: 300px; height: 300px; animation: giffy 0.5s infinite steps(1); } #faux-gif:hover { animation-play-state:paused; } @keyframes giffy { 0% { background-image: url('http://i.imgur.com/E2ee6fI.gif'); } 15% { background-image: url('http://i.imgur.com/JIi0uul.gif'); } 30% { background-image: url('http://i.imgur.com/owNGnNN.gif');} 45% { background-image: url('http://i.imgur.com/2Ii6XOz.gif'); } 60% { background-image: url('http://i.imgur.com/ZmQBrQ5.gif'); } 75% { background-image: url('http://i.imgur.com/iAsfHyY.gif'); } 90% { background-image: url('http://i.imgur.com/AJwRblj.gif'); } 100% { background-image: url('http://i.imgur.com/fx5wUNY.gif'); } }
Demo
JavaScript version ... Not verified very carefully, but that would be the main idea.
window.onload = function() { function FauxGif(element, frames, speed) { this.currentFrame = 0, this.domElement = element, this.frames = frames || null, this.speed = speed || 200; this.interval; this.init(); } FauxGif.prototype = { init: function() { // set the first one to the first image console.log(this.frames[0]) this.domElement.style.backgroundImage = "url(" + this.frames[0] + ")"; }, pause: function() { clearInterval(this.interval); }, resume: function() { var that = this; that.interval = setInterval(function(){ that.currentFrame < that.frames.length - 1 ? that.currentFrame++ : that.currentFrame = 0; that.domElement.style.backgroundImage = "url(" + that.frames[that.currentFrame] + ")"; }, this.speed); } } var frames = [ 'http://i.imgur.com/E2ee6fI.gif', 'http://i.imgur.com/JIi0uul.gif', 'http://i.imgur.com/owNGnNN.gif', 'http://i.imgur.com/2Ii6XOz.gif', 'http://i.imgur.com/ZmQBrQ5.gif', 'http://i.imgur.com/iAsfHyY.gif', 'http://i.imgur.com/AJwRblj.gif', 'http://i.imgur.com/fx5wUNY.gif' ] var elem = document.querySelector('#faux-gif'), gif = new FauxGif(elem, frames); elem.addEventListener('mouseenter', function(){ gif.resume() }); elem.addEventListener('mouseleave', function() { gif.pause(); }); }
Demo
source share