Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.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中以特定的时间延迟显示多个后续图像_Javascript_Html_Performance - Fatal编程技术网

如何在javascript中以特定的时间延迟显示多个后续图像

如何在javascript中以特定的时间延迟显示多个后续图像,javascript,html,performance,Javascript,Html,Performance,我如何才能使它准确地工作,使每张图片在最后一张图片50毫秒后准确地显示出来?因此,从看到图片到点击之间的计算时间是准确的 出身背景 我想要一张幻灯片。图像存储在images目录中,它们的名称是连续的。幻灯片放映应在用户单击“播放”按钮后开始。用户将在第100张图片后点击停止按钮。代码将显示用户在看到第100张图片后单击停止按钮的毫秒数。问题是,当我运行代码时,它的工作不那么准确。它在一些图片上有些滞后。我在想 这是我的密码: 正如我所说的,我相信你的形象并没有像你期望的那样发挥作用。尝试运行下面

我如何才能使它准确地工作,使每张图片在最后一张图片50毫秒后准确地显示出来?因此,从看到图片到点击之间的计算时间是准确的

出身背景 我想要一张幻灯片。图像存储在images目录中,它们的名称是连续的。幻灯片放映应在用户单击“播放”按钮后开始。用户将在第100张图片后点击停止按钮。代码将显示用户在看到第100张图片后单击停止按钮的毫秒数。问题是,当我运行代码时,它的工作不那么准确。它在一些图片上有些滞后。我在想

这是我的密码:

正如我所说的,我相信你的形象并没有像你期望的那样发挥作用。尝试运行下面的堆栈代码段作为演示,并可能确保已清除缓存:

函数图像{ var img=新图像; img.onload=函数{ //异步检查它 控制台。日志“良好”,此为高度; }; img.src=https://www.w3schools.com/w3css/img_lights.jpg'; //不要同步检查高度 控制台。日志“坏”,图像高度; }
不良形象;请注意,由于幽灵和熔毁,获得精确计时的可能性至少暂时低于以前。尽管如此,我不确定是否能帮助您克服setInterval的精度限制;您可以使用它来确保事件不会过早触发,但您不能保证最短的响应时间。您无法在js中进行精确计时。这就是问题所在。@jpaugh虽然这是一个有趣且可能相关的信息,但我相信主要问题听起来像是,至少根据对问题的描述,图像需要预缓冲,以便在显示时通过HTTP请求流传输时不会滞后于DOM线程。根据您的链接,使用performance.now获得毫秒分辨率仍然很简单,如1ms>>20us@tgwtdt预加载图像功能可能无法正常工作。无法同步加载图像,因此在调用img.onload之前检查img.height可能会返回0,即使图像存在。有可能你的循环在第一张图像上就中断了,所以没有一张图像被预加载。为什么精确到50毫秒?使用和requestAnimationFrame的替代实现是一个好的替代方案吗?我不知道如何显示数组中的图像。无论我搜索什么,我都可以使用src。你能教我这个吗?事实上,我想我应该问一个新问题。我现在就来。以下是我的新网站的链接:
<!DOCTYPE html>
<html>
    <head>
        <script>
var player;
var timestamp;
function preloadImage()
{
    var i = 1
    while(true){
        var img = new Image();
        img.src="images/" + i;
        i = i + 1;
        if (img.height == 0) { break; }
    }
}

function next(){
    var fullPath=document.getElementById("image").src;
    var filename = fullPath.split("/").pop();
    var n=parseInt(filename, 10) + 1;
    document.getElementById("image").src = "images/" + n;
    if (document.getElementById("image").height == 0) { clearInterval(player); }
    if (n == 100) { timestamp = new Date().getTime(); }
}

function start(){
    clearInterval(player);
    document.getElementById("image").src = "images/1";
    player = setInterval(function(){ next(); }, 50)
}

function stop(){
    clearInterval(player);
    alert("You clicked after " + (new Date().getTime() - timestamp) + "ms.")
}

preloadImage()
        </script>
    </head>
    <body>
            <img src="images/0" id="image"><br/>
            <button type="button" onclick='start()'>start</button>
            <button type="button" onclick='stop()'>stop</button>
    </body>
</html>