如何逐个像素地移动DIV

时间:2013-03-01 16:38:36

标签: javascript css

我有这样的DIV设置。

  <div id="parent" class="parent">
            <div id="child" class="child">
            </div>
   </div>

样式

    <style>
    .parent{
    float:left; height:300; width:300px; background-color:#00ff00;
    }
    .child{
    float:left; height:60; width:60px; background-color:#00ff00;
    }
    </style>


<script>
            function move(){
                while(m < 100){
                document.getElementByid('child').style.marginTop = m;
                m = m+1;
                }
            }
            move();
 </script>

我想从上到下逐像素地移动内部DIV(命名子)100像素。 我认为可以使用style.marginTop =''和settimeout()函数

来完成

但仍然无法使其发挥作用。

4 个答案:

答案 0 :(得分:6)

以下是使用vanilla JavaScript为div设置动画的方法:http://jsfiddle.net/z6F7m/1/

<强>的JavaScript

var elem = document.getElementById('animated'),
    top = parseInt(elem.style.marginTop, 10) || 0,
    step = 1;

function animate() {
    if (top < 100) {
        requestAnimationFrame(animate);
        elem.style.marginTop = top + 'px';
        top += step;
    }
}

animate();

我强烈建议您使用requestAnimationFrame代替setTimeout,如果浏览器不支持requestAnimationFrame,您可以回退到setTimeout

答案 1 :(得分:2)

试试这个

var element = document.getElementById('child');
for (var i=0; i != 100; i++){
    element.style.marginTop += 1;
}

这将循环100次,每次循环将marginTop加1。

我建议使用jQuery思想,因为使用jQuery你可以简单地做

$("#child").animate({ marginTop: 100 });

修改

顶级示例没有意义,试试这个。

var element = document.getElementById('animated');
    for (var i = 0; i != 100; i++) {
    currentTop = parseInt(element.style.marginTop) || 0;
    newTop = parseInt(currentTop + 1);
    element.style.marginTop = newTop + "px";
}

这也是愚蠢的,因为它循环到快速,当浏览器呈现框时,它已经从顶部100px。 See here

再次使用jQuery solution

答案 2 :(得分:1)

这样做的一种方法是使用jQuery的animate函数,这只需要编写:

$(element).animate({ 'top': '100px' });

Example

答案 3 :(得分:0)

检查以下小提琴。我没有jquery就做到了。

 var step = 0;
 window.setInterval(function(){
    var value = (++step)*100;
    if (value<300)
        document.getElementById("child").style.marginTop=value+"px";
    else
       step = -1;
 },1000);

http://jsfiddle.net/pasindur/EbHt5/