gpt4 book ai didi

javascript - 如何在javascript中以特定时间延迟顺序显示多个图像

转载 作者:行者123 更新时间:2023-12-03 02:33:37 24 4
gpt4 key购买 nike

如何才能使其准确工作,以便每张图片在上一张图片后 50 毫秒准确显示? (这样计算出的看到图片和点击之间的时间是准确的吗?)

背景

我想要一个图像幻灯片。图像存储在images目录中,并且它们的名称是连续的。幻灯片放映应在用户单击播放按钮后开始。用户将在第 100 张图片之后单击停止按钮。该代码将向用户显示在看到第 100 张图片后多少毫秒他们点击了停止按钮。问题是,当我运行代码时,它的工作不那么准确。某些图片有一些滞后。我想知道

这是我的代码:

<!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>

最佳答案

正如我所说的in my comment ,我相信您的 preloadImage() 未按您的预期工作。尝试运行下面的堆栈片段作为演示,并可能确保清除缓存:

function badPreloadImage () {
var img = new Image();

img.onload = function () {
// check it asynchronously
console.log('good', this.height);
};
img.src = 'https://www.w3schools.com/w3css/img_lights.jpg';
// don't check height synchronously
console.log('bad', img.height);
}

badPreloadImage();

要正确预加载所有图像,您必须异步执行此操作:

function preloadImage (done, i) {
if (!i) { i = 1; }

var img = new Image();
img.onloadend = function () {
if (this.height == 0) { return done(); }
preloadImage(done, i + 1);
};
img.src = "images/" + i;
}

// usage
preloadImage(function () { console.log('images loaded'); });

其他问题

您应该考虑使用performance.now()而不是new Date().getTime(),因为它使用更精确的时间分辨率(当前为20us,如this comment 中指出)。

您还可以考虑将每个图像的引用存储为 Image 对象的数组,而不是通过指定 HTMLImageElement< 的 src 属性来加载每个帧,这样浏览器就可以从内存中加载数据,而不是从硬盘上的缓存中加载,甚至在未启用缓存时发出新的 HTTP 请求。

解决这些问题将使您能够通过使用正确的 API 来更精确地测量计时,并消除由于动画效率低下而导致的 DOM 线程上的滞后峰值。

关于javascript - 如何在javascript中以特定时间延迟顺序显示多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48627019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com