如何在javascript中以特定的时间延迟显示多个后续图像
我如何才能使它准确地工作,使每张图片在最后一张图片50毫秒后准确地显示出来?因此,从看到图片到点击之间的计算时间是准确的 出身背景 我想要一张幻灯片。图像存储在images目录中,它们的名称是连续的。幻灯片放映应在用户单击“播放”按钮后开始。用户将在第100张图片后点击停止按钮。代码将显示用户在看到第100张图片后单击停止按钮的毫秒数。问题是,当我运行代码时,它的工作不那么准确。它在一些图片上有些滞后。我在想 这是我的密码: 正如我所说的,我相信你的形象并没有像你期望的那样发挥作用。尝试运行下面的堆栈代码段作为演示,并可能确保已清除缓存: 函数图像{ var img=新图像; img.onload=函数{ //异步检查它 控制台。日志“良好”,此为高度; }; img.src=https://www.w3schools.com/w3css/img_lights.jpg'; //不要同步检查高度 控制台。日志“坏”,图像高度; }如何在javascript中以特定的时间延迟显示多个后续图像,javascript,html,performance,Javascript,Html,Performance,我如何才能使它准确地工作,使每张图片在最后一张图片50毫秒后准确地显示出来?因此,从看到图片到点击之间的计算时间是准确的 出身背景 我想要一张幻灯片。图像存储在images目录中,它们的名称是连续的。幻灯片放映应在用户单击“播放”按钮后开始。用户将在第100张图片后点击停止按钮。代码将显示用户在看到第100张图片后单击停止按钮的毫秒数。问题是,当我运行代码时,它的工作不那么准确。它在一些图片上有些滞后。我在想 这是我的密码: 正如我所说的,我相信你的形象并没有像你期望的那样发挥作用。尝试运行下面
不良形象;请注意,由于幽灵和熔毁,获得精确计时的可能性至少暂时低于以前。尽管如此,我不确定是否能帮助您克服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>