2014-12-02 2 views
7

Я стараюсь, чтобы изображения были больше, чем ширина их просмотра, будет открыта в моем средстве просмотра изображений. Однако при разрешении 720p и Google Chrome я получаю 0 для ширины как для исходной, так и для ширины просмотров ...Chrome не обнаруживает размеры изображений

Вот пример страницы, где изображение должно быть открыто в режиме просмотра BFX (попробуйте в Chrome on низкое разрешение): Live Example

Вход (первое изображения сканируемого изображение в вопросе)

Starting BFX View Version 0.3 Build 61 alpha 
bfxcore.js:92 BFX View -> Looking for images in: .postpreview... 
bfxcore.js:92 BFX View -> Looking for images in: .content... 
bfxcore.js:109 Image: http://media-cache-ec0.pinimg.com/originals/ed/e1/c7/ede1c78fe16fba4afd1606772a5fc1ac.jpg Original Width: 0 Against: 0 
bfxcore.js:109 Image: images/smilies/wink.png Original Width: 0 Against: 0 
bfxcore.js:109 Image: images/smilies/smile.png Original Width: 0 Against: 0 
bfxcore.js:109 Image: images/primus/blue/misc/quote_icon.png Original Width: 0 Against: 0 
bfxcore.js:109 Image: images/primus/blue/buttons/viewpost-right.png Original Width: 0 Against: 0 
bfxcore.js:109 Image: images/smilies/wink.png Original Width: 0 Against: 0 
bfxcore.js:109 Image: images/smilies/smile.png Original Width: 0 Against: 0 
bfxcore.js:109 Image: images/primus/blue/misc/quote_icon.png Original Width: 0 Against: 0 
bfxcore.js:109 Image: images/primus/blue/buttons/viewpost-right.png Original Width: 0 Against: 0 

JavaScript

$(function(){ 

    /**************************************************** 
    / BFX View version 0.3 build 56 
    / by WASasquatch for BeeskneesFX.com 
    /***************************************************/ 

    // Global vars 
    var appname = 'BFX View', 
     appflag = 'alpha', 
     appversion = 0.3, 
     appbuild = 61, 
    // Selectors 
     findImagesIn = new Array(
        '.postpreview', 
        '.content', 
        '.restore', 
        '.postbody' 
        ), // Master container class/id - all image tags in children elements get selected 
    // Theater selectors 
     theater = $('#theater-box'), 
     theaterimg = theater.find('#theater-img'), 
     theaterclose = theater.find('#theater-header span');   

    console.log('Starting '+appname+' Version '+appversion+' Build '+appbuild+' '+appflag); 
    if (notMobile === false) { 
     console.log(appname+' detected a mobile device. Disabling BFX View for performance. Visit us on a desktop!'); 
    } else { 
     // Start a BFX View selector 
     for (i=0; i<findImagesIn.length; i++) { 
      console.log(appname+' -> Looking for images in: '+findImagesIn[i]+'...'); 
      $(findImagesIn[i]).each(function(){ 
       bfxView('.'+$(this).attr('class')); 
      }); 
     } 
    } 

    function bfxView(id) { 
     var imgCount = 0; 
     $(id).each(function(){ 
      $(this).find('img').each(function() { 
       var img = $(this), 
        width, height, origWidth = $(this).width(); 
        hiddenImg = img.clone().attr('class','').attr('id','').css('visibility', 'hidden').removeAttr('height').removeAttr('width').appendTo('#loading-images'); 
       height = hiddenImg.height(); 
       width = hiddenImg.width(); 
       hiddenImg.remove(); 
       console.log('Image: '+$(this).attr('src')+' Original Width: '+origWidth+' Against: '+width); 
       if (width > origWidth) { 
        imgCount++; 
        $(this).css('cursor', 'pointer'); 
        var parent = $(this).parent(); 
        if (parent.attr('href') == $(this).attr('src')) { 
         parent.attr('target','_self'); 
         parent.removeAttr('href'); 
        } 
        $(this).click(function() { 
         var startingPoint = $(document).scrollTop(), 
          theaterActive = true, 
          bodyo = $('body').css('overflow'); 
          $('body').css('overflow', 'hidden'); 
         theaterimg.html('<img src="' + $(this).attr('src') + '" alt="Medium View" />'); 
         setTimeout(function(){ 
          theaterimg.find('img').each(function(){ 
           var renderWidth = $(this).width(); 
           if (renderWidth < width) { 
            $(this).css('cursor', 'pointer'); 
            theater.find('#viewfull').attr('href', '/viewer.html?src='+Base64.encode($(this).attr('src'))+'&t='+Base64.encode(window.location.href)); 
            theater.on('click', '#theater-img img', function(){ 
             window.location.href = '/viewer.html?src='+Base64.encode($(this).attr('src'))+'&t='+Base64.encode(window.location.href); 
            }); 
           } else { 
            theater.find('#viewfull').remove(); 
            $(this).attr('alt','Full Resolution View'); 
           } 
          }); 
         },0); 
         theater.fadeIn(1000, function() { 
          theaterclose.click(function() { 
           theater.fadeOut(1000, function() { 
            theaterActive = false; 
           }); 
           $('body').css('overflow', bodyo); 
          }); 
         }); 

        }); 

       } 

      }); 

     }); 

     console.log(appname+' -> '+imgCount+' images found in '+id); 

    } 


}); 

Я изменил код поиска, намереваясь убедиться, что все возможные классы были проверены. Старый код для начала поиска был

 for (i=0; i<findImagesIn.length; i++) { 
      console.log(appname+' -> Looking for images in: '+findImagesIn[i]+'...'); 
      bfxView(findImagesIn[i]); 
     } 

Обновленный Кодекс Еще не идти на Chrome и разбит на Firefox с этим редактирования. Это скажет мне, что «Ширина» и «высота» не определены, например, изображение не загружается.

  $(this).find('img').each(function() { 
       $(this).load(function(){ 
        var img = $(this), 
         width, height, origWidth = $(this).outerWidth(); 
         hiddenImg = img.clone().attr('class','').attr('id','').css('visibility', 'hidden').removeAttr('height').removeAttr('width').appendTo('#loading-images'); 
        height = hiddenImg.height(); 
        width = hiddenImg.width(); 
        hiddenImg.remove(); 
       }); 
+0

Chrome *** не Firefox. – WASasquatch

ответ

3

Ваш пример не работает:

BFX View -> 0 images found in ... 

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

Get the real width and height of an image with JavaScript? (in Safari/Chrome)

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

+0

Серверная сторона не является вариантом. И большинство изображений ограничены, если ссылка не указана в bbcode и не имеет значения для начала. Таким образом, это просто дополнительная функция, которая в противном случае была бы устаревшим изображением. Когда он работает, и он работает в firefox просто отлично, на самом деле сейчас наблюдается отставание при загрузке изображений. – WASasquatch

+1

@WASasquatch Ответ, который он связал, работает отлично. Проверьте это. – Makaze

3

необходимо добавить прослушиватель событий ко всем изображениям и получить их границы после их загрузки >> напр.

img.onload = function() { 
    // get width and height of the img refering to it using "this" keyword 
} 

и если вы используете JQuery

$(imgSelector).load(function(){ 
    // get width and height of the img refering to it using "$(this)" 
}): 
+0

Я пробовал делать именно это, а не в Chrome или Firefox. xD – WASasquatch

+0

Любые идеи. См. Выше отредактированный код и живую версию. – WASasquatch

Смежные вопросы