首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算一个动画gif循环了多少次并在javascript中显示该次数?

问如何计算一个动画gif循环了多少次并在javascript中显示该次数?
EN

Stack Overflow用户
提问于 2021-10-17 08:03:22
回答 1查看 48关注 0票数 0

有没有办法显示一个动画gif循环的次数?例如,当您登录到具有动画gif的页面时,当该gif完全循环其动画一次时,将显示1。则该数字在每次gif完全循环时加1。永远不变。

谢谢你的见解!

EN

回答 1

Stack Overflow用户

发布于 2021-10-17 09:13:12

我先计算gif的持续时间,然后计算setInterval。我的gif有15秒长。

​

代码语言:javascript
复制
const gif = document.getElementById("gif");
    gifLoopCounterInit(gif.src);
    function gifLoopCounterInit(fileSrc) {
        var request = new XMLHttpRequest();
        request.open('GET', fileSrc, true);
        request.responseType = 'arraybuffer';
        request.addEventListener('load', async function () {
            calcDurationGif(request.response).then(function (duration) {
                const loopCounter = document.getElementById("loop-counter");
                setInterval(function () {
                    loopCounter.innerHTML++;
                }, duration * 1000);
            });
        });
        request.send();
    }
    function calcDurationGif(file) {
        return new Promise((resolve, reject) => {
            try {
                let arr = new Uint8Array(file);
                let duration = 0;
                for (var i = 0; i < arr.length; i++) {
                    if (arr[i] == 0x21
                        && arr[i + 1] == 0xF9
                        && arr[i + 2] == 0x04
                        && arr[i + 7] == 0x00) {
                        const delay = (arr[i + 5] << 8) | (arr[i + 4] & 0xFF)
                        duration += delay < 2 ? 10 : delay;
                    }
                }

                console.log(duration / 100);
                resolve(duration / 100);
            } catch (e) {
                reject(e);
            }
        });
    }
代码语言:javascript
复制
<img id="gif" src="https://c.tenor.com/AeFQKHQFFq8AAAAd/gif-art.gif" alt="">
    <p>Loops : <span id="loop-counter">0</span> </p>

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69602392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档