javascript - 刷新时图像不会停止闪烁
问题描述
我已经查看并尝试了许多解决此问题的方法,但没有任何效果。我有一个网站上的图像需要每秒更新 10-30 倍(实时视频源),所以我有 javascript 每 100 毫秒请求一次图像。当图像保持不变时,没有闪烁。当图像发生变化时,我看到图像闪烁 2-3 秒。
function initImg() {
var canvas = document.getElementById("diagimg");
var context = canvas.getContext("2d");
img = new Image();
img.onload = function() {
var scale = .73;
canvas.setAttribute("width", 640*scale);
canvas.setAttribute("height", 480*scale);
context.scale(scale, scale); //scale it to correct size
context.drawImage(this, 0, 0);
}
img.onerror = function() {
img.src="images/wait.jpeg"; //if error during loading, display this image
}
refreshImg();
}
function refreshImg() {
img.src = "images/IMAGE.png?time="+new Date().getTime();
window.setTimeout("refreshImg()", 100);
}
initImg();
解决方案
我已经将您的代码变成了一个示例来测试这种行为,但我根本看不到任何闪烁。闪烁是否可能是由服务器端代码引起的?
let images = [
'https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Mercury_in_color_-_Prockter07-edit1.jpg/220px-Mercury_in_color_-_Prockter07-edit1.jpg',
'https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/PIA23791-Venus-NewlyProcessedView-20200608.jpg/220px-PIA23791-Venus-NewlyProcessedView-20200608.jpg',
'https://upload.wikimedia.org/wikipedia/commons/thumb/9/97/The_Earth_seen_from_Apollo_17.jpg/220px-The_Earth_seen_from_Apollo_17.jpg',
'https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/OSIRIS_Mars_true_color.jpg/220px-OSIRIS_Mars_true_color.jpg'
];
let i = 0;
function getImage() {
i++;
if (i >= images.length)
i = 0;
return images[i];
}
//--------------------------------------
function initImg() {
var canvas = document.getElementById("diagimg");
var context = canvas.getContext("2d");
img = new Image();
img.onload = function() {
var scale = .73;
canvas.setAttribute("width", 640 * scale);
canvas.setAttribute("height", 480 * scale);
context.scale(scale, scale); //scale it to correct size
context.drawImage(this, 0, 0);
}
refreshImg();
}
function refreshImg() {
img.src = getImage() + "?time=" + new Date().getTime();
window.setTimeout("refreshImg()", 500);
}
initImg();
<canvas id="diagimg" />
推荐阅读
- python - 如何从两个熊猫数据帧中插入时间戳
- python - 使用 sqlalchemy 的 mariadb 的 Python 数据库连接
- java - 如何在 java 函数调用上设置超时,并在超时结束后终止其执行?
- c# - 无法加载文件或程序集“Magick.NET-Q16.Wrapper-x64.dll”
- ms-access - 访问计算数字字段:模数问题
- airflow - Airflow - 为某些端点返回 405 的实验性 API
- latex - Latex 引用单独的 PDF
- google-apps-script - 根据谷歌工作表中基本工作表中的范围从模板工作表创建新工作表
- python - 使用 Cookie 和机器学习检查机器人流量
- r - 在水平绘图子图中共享 x 轴标签