Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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 HTML画布以静默方式删除帧(requestAnimationFrame)_Javascript_Html_Canvas - Fatal编程技术网

Javascript HTML画布以静默方式删除帧(requestAnimationFrame)

Javascript HTML画布以静默方式删除帧(requestAnimationFrame),javascript,html,canvas,Javascript,Html,Canvas,我发现canvas+javascript在使用requestAnimationFrame()时会悄悄地删除帧(在Chrome版本53.0.2785.116(64位)上测试)。最令人惊讶的是,getImageData即使在没有显示帧的情况下也会显示正确的颜色值 下面的代码应每60帧显示一次白色闪光,对于60Hz监视器,应每1秒显示一次白色闪光。但有时,即使没有显示白色闪烁,控制台也会显示“闪烁”。有没有关于正在发生什么以及如何检测帧是否下降的想法 var canvas=document.getEl

我发现canvas+javascript在使用requestAnimationFrame()时会悄悄地删除帧(在Chrome版本53.0.2785.116(64位)上测试)。最令人惊讶的是,getImageData即使在没有显示帧的情况下也会显示正确的颜色值

下面的代码应每60帧显示一次白色闪光,对于60Hz监视器,应每1秒显示一次白色闪光。但有时,即使没有显示白色闪烁,控制台也会显示“闪烁”。有没有关于正在发生什么以及如何检测帧是否下降的想法

var canvas=document.getElementById("flicker")
var context = canvas.getContext("2d")

canvas.width  = window.innerWidth
canvas.height = window.innerHeight

let i = 0
let displayFlash = false

// once per second
function renderLoop() {
    if (i%60 == 0) {
        console.log("flash")
        displayFlash = true
        context.fillStyle = "white"
    } else if (displayFlash) {
    // try to verify frame was displayed
        if (context.getImageData(1,1,1,1).data[0]===255) {
        displayFlash = false
        context.fillStyle = "black"
        }  else {
        context.fillStyle = "white"
      }

    } else {
        context.fillStyle = "black"
    }
    context.fillRect(0, 0, canvas.width, canvas.height);       
    i++
    requestAnimationFrame(renderLoop)
}

renderLoop()


编辑:修复了jsfiddle链接

我发现你的代码没有任何作用如果你看不到闪光灯,但闪光灯被记录了怎么会因为你的眼睛没有检测到闪光灯而“掉帧”flash@JaromandaX抱歉,我在JSFIDLE链接上删除了该版本。现在应该可以了。在我的电脑(2013 core i5)上,它会减少20%的闪烁。在6核i7+gtx 1070上测试时,它会下降约1%的帧。我们的眼睛可以检测到16毫秒的白光,我有一个核心i5-3470和GT 630视频卡-因此,远低于您的规格。而且没有“丢失”的闪光——也许是你的显示器——不过,我只使用Firefox进行了测试,将在Chrum 54中进行测试。不,Chrum也可以