2013-07-22 73 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