У меня есть функция, которая должна ждать, пока загрузится фоновое изображение, а затем добавит отношение изображения к контейнеру и затухает контейнер фонового изображения. Он работает в Chrome, но не работает в Internet Explorer 8 и 9, и не всегда работает в 10. В ie8 он, похоже, не понимает jquery в событии (load). В точках 9 и 10 он не всегда находит ширину фонового изображения. Как я могу заставить его работать в ie8 + и других основных браузерах?JS/jQuery: background image onload
ЯШ:
$('.item').each(function(index) {
var thisItem = $(this);
var image_url = thisItem.find('.img').css('background-image');
var img = new Image();
img.src = image_url.replace(/(^url\()|(\)$|[\"\'])/ig, '');
if (image_url){
//initialize only when background img is loaded
var $img = $('<img>').attr('src', img.src).on('load', function(){
//don't allow img to be larger than it is
if(img.width < thisItem.width()){thisItem.css({'max-width':img.width+'px'});}
var ratio = img.height/img.width;
thisItem.find('.item_ratio').css({'padding-bottom':ratio*100+'%'});
thisItem.find('.img').fadeIn(800);
});
}
});
HTML:
<div class="item">
<div class="img" style="background-image:url('some_url'); width: 100%; background-size: cover;"></div>
<div class="item_ratio"></div>
<!-- Some other not important html ->
</div>
На самом деле этот плагин не поддерживает фоновые изображения, которые мне действительно нужны – vlad
Я вижу, что вы слушаете событие 'load' на' $ ('') '. Однако вам может потребоваться фактически вставить его в DOM (скрытый) для «загрузки» для запуска. Я сделал это недавно, и он работал надежно. –