Search code examples
javascriptimageanimation

Animated Image with Javascript


Is there a way to create a gif like image with javascript based on some png or jpg?

Just a simple code that change one image for another, creating the impression of a animation, just like a gif.

The idea is to use for generating a banner, so ill upload the pictures (thats done) and i need a code for this animation.


Solution

  • Stackoverflow used this technique for its unicorn animations last april fools day. I preserved the animations on my website. The animation code is my own - I didn't look at how stackoverflow was doing it.

    The concept is to create a sprite, and then change the background position on an interval.

    sprite

    const frameHeight = 102;
    const frames = 15;
    const div = document.getElementById("animation");
    let frame = 0;
    setInterval(function () {
        const frameOffset = (++frame % frames) * -frameHeight;
        div.style.backgroundPosition = "0px " + frameOffset + "px";
    }, 100);
    #animation { 
        background-image: url(https://jumpingfishes.com/dancingpurpleunicorns/charging.png);
        background-repeat: no-repeat; 
        height: 102px; 
        width: 140px; 
    }
    <div id="animation"></div>

    Edit: If you don't want to create a sprite, here's an alternate technique you can use. Put all of your animation frame images in a div and hide all but the first one. In your setInterval function, change which image is diplayed:

    const frames = document.getElementById("animation").children;
    const frameCount = frames.length;
    let i = 0;
    setInterval(function () { 
        frames[i % frameCount].style.display = "none";
        frames[++i % frameCount].style.display = "block";
    }, 100);
    #animation img {
        display: none;
    }
    #animation img:first-child {
        display: block;
    }
    <div id="animation">
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging01.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging02.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging03.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging04.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging05.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging06.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging07.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging08.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging09.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging10.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging11.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging12.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging13.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging14.png" />
        <img src="https://jumpingfishes.com/dancingpurpleunicorns/charging15.png" />
    </div>