Animated GIF in HTML5 canvas

前端 未结 5 2521
故里飘歌
故里飘歌 2020-12-04 15:21

In HTML5, how can I draw easily (no too much complex code please) an animated GIF in a canvas that works (with drawImage only first frame is shown in the canvas)

5条回答
  •  不知归路
    2020-12-04 16:05

    Well if automated canvas animation of gif files isn't available, you could try using sprite-sheets, but that indeed would require a bit more code.

    var img_obj = {
        'source': null,
        'current': 0,
        'total_frames': 16,
        'width': 16,
        'height': 16
    };
    
    var img = new Image();
    img.onload = function () { // Triggered when image has finished loading.
        img_obj.source = img;  // we set the image source for our object.
    }
    img.src = 'img/filename.png'; // contains an image of size 256x16
                                  // with 16 frames of size 16x16
    
    function draw_anim(context, x, y, iobj) { // context is the canvas 2d context.
        if (iobj.source != null)
            context.drawImage(iobj.source, iobj.current * iobj.width, 0,
                              iobj.width, iobj.height,
                              x, y, iobj.width, iobj.height);
        iobj.current = (iobj.current + 1) % iobj.total_frames;
                       // incrementing the current frame and assuring animation loop
    }
    
    function on_body_load() { // ...
        var canvas = document.getElementById('canvasElement');
                     // 
        var context = canvas.getContext("2d");
    
        setInterval((function (c, i) {
                    return function () {
                        draw_anim(c, 10, 10, i);
                    };
        })(context, img_obj), 100);
    }
    

    This is how I'd tackle the problem. Hope this has been helpful. (tested)

提交回复
热议问题