2013-07-22 101 views
2

這看起來像一個荒謬的問題,特別是當這是我的工作時,但我對CSS和JavaScript的定位和大小沒有特別的瞭解。我有一個「動畫」對象(使用給定的緩動功能來改變它們的屬性)的功能。每次動畫進行時,都會調用一個應該調整測試div大小的回調函數,但div保持不變。它一定很簡單,但我不明白。Div無法通過JavaScript調整大小

這裏是一個小提琴:http://jsfiddle.net/sd9tJ/

和一塊的代碼,所以我可以提交問題:d

$(document).ready(function() { 

    var surface = {w : 100, h : 100}; 

    var $div = $('#test'); 

    $t.animate(surface, {w : 200, h : 200}, 2000, $t.easing.linear, function() { 
     document.body.innerHTML += '('+Math.round(surface.w)+'/'+Math.round(surface.h)+')'; 
     $div.css({ 
      width : Math.round(surface.w) + 'px', 
      height : Math.round(surface.h) + 'px' 
     }); 
    }); 
}); 

的值是正確的,但是風格不希望更新,所以我認爲它是CSS相關的。

有什麼想法?

Tahnks您的幫助:)

+0

我相信動畫方法最多接受4個參數,而不是5. – hungerstar

+0

動畫函數在我鏈接的小提琴中描述。這裏是它的參數:'函數(主題,目標,持續時間,緩動,onchange)' – Virus721

回答

2

的問題在於,調試技術:

document.body.innerHTML += ... ; 

那拿起<div>和原來的HTML重新添加它,因爲它最初站在頁面加載時。拿出來,它工作正常。

編輯 —,如果你在函數使用$('#test')工作的事情的原因是它導致了jQuery走出去,重新找到的元素。因此,它找到更新的一個,並且事情起作用。

,添加到文檔一樣,導致問題的原因是,它是一樣的:

document.body.innerHTML = document.body.innerHTML + whatever; 

抓取當前innerHTML讓你的頁面而不款式更新的元素。然後它重新創建整個頁面DOM。使用console.log(),或者在頁面上創建一個特殊元素並單獨更新其HTML。

+0

感謝它的工作。是不是document.body.innerHTML應該更新? – Virus721

+0

@ Virus721我會更新答案。 – Pointy

+0

這意味着樣式存儲在HTML內?是不是jQuery修改元素的樣式屬性? – Virus721

2

將其更改爲:

$('#test').css({ 
     width : Math.round(surface.w) + 'px', 
     height : Math.round(surface.h) + 'px' 
    }); 
+0

感謝您的回答,但爲什麼? div是靜態的,我可以緩存它。編輯:我試着如你所說,它的工作原理。我不明白爲什麼。你能解釋我嗎? – Virus721

+0

其實它,我不明白爲什麼。 – Virus721

+0

我不確定,我會懷疑這是一個試圖將jquery對象保存到本地var的問題?您可以始終存儲div的名稱而不是對象,例如:var'myDiv =「#test」;',然後調用:'$(myDiv).css(....' – Alfie