2014-03-30 32 views
0

我試圖讀取圖像的大小,並調整其邊緣,如果它的高度大於150。但我在控制檯上運行該代碼時,總是得到一個「0」:Javascript太慢?

 var coverImg; 
     coverImg = document.getElementById('userCover'); 

     $.ajax({ 
       type: "POST", 
       url: 'code/submit/submitGetUserData.php', 
       data: {id: userID, what: 'all'}, 
       async: false, 
       success:function(data,status){ 
        var dataArray = data.split(','); 

        document.getElementById('userAvatar').src = dataArray[0]; 
        coverImg.src = dataArray[1]; 
        $('#userName').text(dataArray[2]); 
       }, 
       error: function(){ 
        alert("error occured"); 

       }, 
       complete: function(){ 
        console.log(coverImg.height); 

        if(document.getElementById('userCover').height > 150) 
        { 
         var regulate = 0; 
         regulate = (coverImg.height - 150)/2; 
         regulate = regulate * (-1); 



         coverImg.style.marginTop = regulate; 
        } 
       } 
     }); 

是JS讀取height屬性太慢?

我希望有人能幫助我!

+0

如果您在chrome或firefox中打開開發人員工具,並檢查收到該ajax調用的時間響應,它說什麼? – vittore

+2

同步ajax通常被認爲是一個非常糟糕的主意。 – Pointy

+0

JavaScript不慢,什麼是緩慢的下載從辛辛那提的圖像。在此之前,我們不知道故事大小。 – rupps

回答

5

將當前放置在complete中的代碼移到coverImg.onload處理程序中。例如:

coverImg.onload = function() { 
    if(document.getElementById('userCover').height > 150) { 
    var regulate = (150 - this.height)/2; 
    // ... 
    } 
} 
coverImg.src = dataArray[1]; 

...作爲瀏覽器可以確定<img>元素的高度,只有在它的滿載 - 和complete回調之前解僱。

+0

非常感謝你,工作完美! :) –