Я пытаюсь построить «бесконечный» график, идея состоит в том, что я буду перерисовывать холст в себя, перемещая его на один пиксель слева, а затем очищаю правый крайний столбец, рисуя пиксель в очищенном колонка. Но что-то не работает, и я не могу понять, что. Пример кода ниже:Полоса прокрутки горизонтально
var telemetryScreen, telemetryTimer;
function displayUI() {
if (!telemetryScreen) {
telemetryScreen = document.createElement("div");
telemetryScreen.className = "telemetry-screen";
document.body.appendChild(telemetryScreen);
}
return telemetryScreen;
}
var plotFps = function(canvas) {
canvas.className = "telemetry-fps";
canvas.width = 320;
canvas.height = 240;
canvas.getContext("2d").fillStyle = "red";
if (!telemetryScreen) displayUI().appendChild(canvas);
return function (delta) {
var context = canvas.getContext("2d");
context.drawImage(canvas, 1, 0, 319, 240, 0, 0, 319, 240);
context.clearRect(319, 0, 1, 240);
context.fillRect(319, 120 + delta, 1, 1);
};
}(document.createElement("canvas"));
function startSampling() {
var now, delta, last, start = new Date().getTime(),
seconsPerFrame = 16;
if (telemetryTimer) clearInterval(telemetryTimer);
telemetryTimer = setInterval(
function() {
last = now;
now = new Date().getTime();
delta = now - last - seconsPerFrame;
plotFps(delta);
}, seconsPerFrame);
// We don't anticipate framerates
// higher then 60 fps
}
startSampling();
Я также попытался translate()
, но она перестает работать после того, как полотно будет прокручивать более затем один из его ширины:/
Спасибо, я думаю, что в конце концов я решил это по-другому, но это тоже работает. (Я заменил 'clearRect' на' drawRect', который использовал цвет фона.) Все еще неудобно, что 'clearRect', похоже, не делает то, что он должен использовать, однако он не делает это последовательно в браузерах, поэтому он должен быть чем-то о своей цели, которую я не понимаю. –