JS ожидает загрузки фонового изображения CSS - PullRequest
5 голосов
/ 28 января 2012

Легко заставить javascript ждать загрузки некоторых изображений, если это классические HTML-изображения.

Но я не могу понять, как сделать то же самое, если изображение загружается как CSS backuground-image!

Возможно ли это?

Метод jQuery .load(), кажется, не применяется .. и у меня не хватает идей

Ответы [ 4 ]

1 голос
/ 21 декабря 2012

Один из альтернативных подходов - извлечь данные изображения через AJAX в виде png в кодировке base64 и применить его к свойству background-image элемента.

Например:

$.get('/getmyimage', function(data) {
    // data contains base64 encoded image
    // for ex: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==

    $('#yourElement').css('background-image', 'url("' + data + '")');
});

Вам также понадобится сценарий на стороне сервера, который считывает изображение, преобразует его в кодированный в формате base64 png (и, возможно, кеширует его) и возвращает его.

1 голос
/ 21 декабря 2012

Он ищет элементы с атрибутом src или свойством backgroundImage css и вызывает функцию action при загрузке их изображений.

/**
 * Load and wait for loading images.
 */
function loadImages(images, action){
    var loaded_images = 0;
    var bad_tags = 0;        

    $(images).each(function() {
    //alert($(this).get(0).tagName+" "+$(this).attr("id")+" "+$(this).css("display"));
        var image = new Image();
        var src = $(this).attr("src");
        var backgroundImage = $(this).css("backgroundImage");            
        // Search for css background style
        if(src == undefined && backgroundImage != "none"){
            var pattern = /url\("{0,1}([^"]*)"{0,1}\)/;                
            src = pattern.exec(backgroundImage)[1];                
        }else{
            bad_tags++;
        }
        // Load images
        $(image).load(function() {
            loaded_images++;                
            if(loaded_images == ($(images).length - bad_tags))
                action();
        })
        .attr("src", src);
    });
}
0 голосов
/ 29 мая 2012

Попробуйте это ...

Это jQuery-плагин, который дает вам возможность ждать загрузки изображений

Project-Home

Тема @ SO Официальный способ попросить jQuery дождаться загрузки всех изображений перед выполнением чего-либо

Ответить @ SO (Shortlink)

0 голосов
/ 28 января 2012

это непроверенный код, но попробуйте это:

$(document).ready(
 function() 
 {
   var imgSrc = $('theTargerElement').css('background-image');
   var imgTag = $('<img>').attr('src',imgSrc).appendTo( 'body' );
 }
);

$(document)
 .load( 
   function() 
   {
     // do stuff
   } 
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...