在HTML5中,我怎麼能畫容易(沒有太多複雜的代碼,請)在工作畫布GIF動畫(帶的drawImage僅第一幀在畫布所示)動畫GIF在HTML5畫布
回答
帆布動畫不是HTML5規範的一部分。無論是恢復到GIF或考慮呈現SVG或回落到畫布/ VML基於JavaScript庫:http://raphaeljs.com/
我相信你正在尋找http://slbkbs.org/jsgif
遺憾的是,DOM不公開單獨的幀的GIF,所以這是通過下載GIF(使用XMLHttpRequest),解析它,然後在
<canvas>
上繪製它來完成的。
那麼,如果gif文件的自動化畫布動畫不可用,您可以嘗試使用精靈表,但確實需要更多的代碼。
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() { // <body onload='on_body_load()'>...
var canvas = document.getElementById('canvasElement');
// <canvas id='canvasElement' width='320' height='200'/>
var context = canvas.getContext("2d");
setInterval((function (c, i) {
return function() {
draw_anim(c, 10, 10, i);
};
})(context, img_obj), 100);
}
這就是我如何解決這個問題。希望這有幫助。 (已測試)
這是慈祥的老人。我現在處理它的方式會有所不同。如果您不介意在您的代碼中添加新庫,請使用這些評論中提出的許多可用備選方案之一。 考慮到ES6的出現,這將更好地重建爲具有更多功能的類。 :) – 2016-05-05 07:28:42
對於仍然有問題的人,或者不想動態加載其圖像或找出需要使用多少幀的人;
在HTML頁面上留下動畫GIF,設置爲在CSS中顯示:block,visibility:visible和position:relative。動態地將其置於畫布下方,並帶有負邊距頂部/ Z-索引(或您有什麼)。然後設置一個反覆調用drawImage的JavaScript定時器,以便根據需要快速刷新圖像。
如果圖像在DOM中不可見,則drawImage例程無法獲取動畫的後續幀。如果圖像完全位於畫布下,則渲染滯後。
你不能像這樣分層,除非你把多個畫布放在另一個之上 – trinalbadger587 2016-12-25 16:36:40
哦,它在2016年年底發生了變化嗎?因爲在2014年,我在Chrome和VTC1010上都做得很好。 – Ayelis 2017-03-24 18:12:10
那麼,正如其他人已經表示,你必須拆分幀動畫。我解決問題的方式更多的是個人偏好,但我在GIMP中打開GIF,並使用插件將所有作爲單獨圖層顯示的幀轉換爲精靈圖表。然後,我只需要在畫布上對精靈進行動畫處理,這很容易。
這裏是link該插件:d
- 1. Html5畫布動畫
- 2. 動態HTML5畫布動畫
- 3. HTML5畫布動畫問題
- 4. Html5,JavaScript,畫布動畫?
- 5. Fabric.js畫布上的動畫GIF
- 6. html5 - 拖動畫布
- 7. html5畫布滾動
- 8. 帆布.gif注意動畫
- 9. 動畫在HTML5畫布中很慢
- 10. 如何在HTML5畫布中動畫樹
- 11. 用畫布在HTML5中逐幀動畫
- 12. 在HTML5畫布
- 13. 動畫gif不是動畫
- 14. 使用HTML5 canvas生成動畫GIF
- 15. 閃存CC HTML5畫布播放動畫
- 16. 動畫選項HTML5畫布/ CSS3/jQuery
- 17. html5畫布 - 按路徑動畫對象
- 18. 與HTML5畫布等待動畫
- 19. html5動畫畫布已繪製元素
- 20. 將多個HTML5畫布動畫
- 21. HTML5畫布,動畫和封閉庫
- 22. HTML5畫布:如何動畫上下文?
- 23. HTML5畫布中的流暢動畫
- 24. 動畫GIF不在WPF中動畫
- 25. DirectFB&GIF動畫
- 26. XNA gif動畫
- 27. jQuery GIF動畫
- 28. Android:動畫gif
- 29. WPF動畫GIF
- 30. 動畫 - GIF
這可能是有用的:https://github.com/matt-way/gifuct-js – JoeRocc 2017-08-23 08:19:30