Обновить фоновое изображение таблицы без «мерцания»

#javascript #image #refresh

#javascript #изображение #обновить

Вопрос:

Я использую скрипт JavaScript для обновления фонового изображения таблицы. Таблица и изображение используются для обновления «ячеек обнаружения движения» на камере. Таблица используется для хранения некоторых данных для обнаружения движения для каждой ячейки.

Чтобы увидеть, какие ячейки необходимо изменить, я обновляю фоновое изображение таблицы каждые 2 секунды или около того, но изображение мерцает. На другой HTML-странице, если я обновляю изображение, помещенное в img тег, оно не мерцает, а просто обновляет изображение, в то время как в таблице это выглядит так, как будто изображение удалено, а новое используется в качестве фона

Есть ли способ изменить это поведение для фонового изображения таблицы? (Я думал о том, чтобы поместить таблицу поверх img элемента, а затем обновить изображение.)

Комментарии:

1. Предварительно загрузите изображение, чтобы убедиться, что оно находится в кэше

Ответ №1:

Как кто-то сказал в комментариях… вы могли бы предварительно загрузить изображение. Многие браузеры делают это уже под капотом.

Мой совет к этому решению:

<table> это то, что я бы не рассматривал в данном случае. На самом деле я бы выбрал <canvas> элемент и создал сетку, используя 2D или 3D контекст (WebGL), потому что это, похоже, проблема реального времени. И когда дело доходит до динамического материала — canvas выигрывает, потому что ему не нужно настраивать все списки для каждого элемента и все эти CSS-слои.

Например:

 const canvas = document.querySelector('canvas')
const ctx = canvas.getContext('2d')

let img = new Image()
img.onload = image => {
    ctx.drawImage(img, 10, 10, 100, 100)
    // Logic here

}
img.src = '/path/to/image.jpg'
  

Не забудьте сделать этот код более чистым и масштабируемым. Это всего лишь простой пример того, как нарисовать изображение на холсте.

Если вы не знакомы с CanvasAPI, я настоятельно рекомендую углубиться в эту тему, потому что она открывает много новых возможностей.

Ответ №2:

Вот что я придумал, поскольку я уже смог обновить изображение в теге IMG без мерцания.

Я создал div того же размера, что и изображения / таблица, и расположил изображение на 0, 0, а таблицу также расположил на 0, 0.