Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 优化PNG图像序列动画_Javascript_Jquery_Html - Fatal编程技术网

Javascript 优化PNG图像序列动画

Javascript 优化PNG图像序列动画,javascript,jquery,html,Javascript,Jquery,Html,我有一个形成动画的PNG序列,我使用此函数播放: HTML: 问题是,为了使动画以“60 FPS”的速度运行,我在setInterval中设置了30毫秒,并且总是提示获取图像 因此,我的问题是,如何缓存该动画,或者找到另一种优化方法如果需要以60 FPS的速度运行动画,那么最好切换到动画GIF(也支持透明度)。逐帧播放的问题是每个单独的PNG“帧”的加载时间极不可预测,因此将它们组合成GIF将允许您一次预加载整个“视频”,然后只播放它。这是迄今为止最简单的选择,因为您不需要担心缓存每个帧 如果G

我有一个形成动画的PNG序列,我使用此函数播放:

HTML:

问题是,为了使动画以“60 FPS”的速度运行,我在setInterval中设置了30毫秒,并且总是提示获取图像


因此,我的问题是,如何缓存该动画,或者找到另一种优化方法如果需要以60 FPS的速度运行动画,那么最好切换到动画GIF(也支持透明度)。逐帧播放的问题是每个单独的PNG“帧”的加载时间极不可预测,因此将它们组合成GIF将允许您一次预加载整个“视频”,然后只播放它。这是迄今为止最简单的选择,因为您不需要担心缓存每个帧

如果GIF不是一个选项,那么您将需要预先加载所有帧(可以是放置在
中的脚本中,也可以是其他格式),以便它们都被缓存,并且
元素不需要浪费时间逐个加载它们。一旦预加载,回放JavaScript函数将以与现在相同的方式翻转帧

希望有帮助

<script>
    $(document).ready(function () {
        playAnimation("firstAnimation", 58); // 58 images in one sequence
    });
</script>

<img id="firstAnimation" directoryimage='../myFirstAnimation/' />
var animation_list = [];

    function playAnimation(elementID, limitCount, count = 0) {
        var directoryimage = $(`#${elementID}`).attr('directoryimage');

        if (animation_list.find(x => x.name == $(`#${elementID}`).attr('id')) == undefined) {
            animation_list.push({
                name: $(`#${elementID}`).attr('id'), animation: setInterval(function () {
                    count++;
                    $(`#${elementID}`).attr('src', directoryimage + count + ".png");

                    if (count == limitCount) {
                        count = 0;
                    }
                }, 30)
            });
        }
    }