Подтвердить что ты не робот

Как предотвратить замедление фонового изображения при изменении

Я применяю повторное фоновое изображение с холста к div с помощью javascript следующим образом:

var img_canvas = document.createElement('canvas');

img_canvas.width = 16;

img_canvas.height = 16;

img_canvas.getContext('2d').drawImage(canvas, 0, 0, 16, 16);

var img = img_canvas.toDataURL("image/png");

document.querySelector('#div').style.backgroundImage = 'url(' + img + ')';

Я должен обновлять его довольно часто. Проблема заключается в том, что он мерцает при изменении, это, похоже, не происходит в Chrome, но это действительно плохо в Firefox и Safari. Можно ли это остановить? Я не думал, что это произойдет, поскольку это dataurl, и поэтому его не нужно загружать.

Решение:

// create a new Image object
var img_tag = new Image();

// when preload is complete, apply the image to the div
img_tag.onload = function() {

    document.querySelector('#div').style.backgroundImage = 'url(' + img + ')';
}

// setting 'src' actually starts the preload
img_tag.src = img;
4b9b3361

Ответ 1

Попробуйте предварительно загрузить ресурс изображения в хранилище устройств, включив изображение в DOM, как в следующем HTML-коде. Возможно, ошибка возникает из-за необходимости загрузки ресурса изображения, который занимает некоторое время (мерцание).

<img src="imageToPreload.png" style="display:none;" alt="" />

Вы можете использовать спрайты-изображения. При использовании спрайтов вашему приложению потребуется меньше HTTP-запросов для загрузки всех ресурсов на вашу страницу. Также добавьте следующие стили CSS, если вы используете css animations. Это предотвратит мигание фона на мобильных устройствах:

-webkit-backface-visibility: hidden;
-moz-backface-visibility:    hidden;
-ms-backface-visibility:     hidden;

Ответ 2

Попробуйте добавить этот css в свой фоновый элемент:

-webkit-backface-visibility: hidden;
-moz-backface-visibility:    hidden;
-ms-backface-visibility:     hidden;

Это должно помочь с мерцанием.

Вы также можете "принудительно" аппаратное ускорение, добавив это в свой фоновый элемент:

-webkit-transform: translate3d(0, 0, 0);

Другой вариант - использовать изображение вместо DIV и изменять только URL-адрес изображения.

Ответ 3

Предварительно загрузите свое изображение, не нужно включать <img> с display: none

<link rel="preload" href="/images/bg-min.png" as="image">

Ответ 4

Я немного боролся с этим, попробовал предварительную загрузку, добавив изображение в документ и т.д.

В конце концов, я сохранил JPEG без опции "Progressive" .

Это фиксировало мерцание мерцания при замене img src.