代码之家  ›  专栏  ›  技术社区  ›  Adriana

我想使用循环将一个元素向左移动

  •  0
  • Adriana  · 技术社区  · 17 年前

    我打赌我有一个基本的问题,但我两个晚上都没能解决。 我有一个“ul”元素,我只想让它每2秒向左移动任意数量的像素。我希望他一步一步地移动,然后回到原来的位置,再次开始移动。 我被卡住了,我的剧本只把它移动到最后的位置并完成。

    window.onload = function moveUl(){  
    var eUl = document.getElementById('change');  
    var eLi = eUl.getElementsByTagName('li');
    x = -300;
    
    function move(){
        for(i=0;i< eLi.length;i++){
            eUl.style.marginLeft = i*x+'px'; 
        }
    } 
    setInterval(move,1000);
    }
    

    这是我能想到的最简单的。我知道这个脚本在1秒后执行整个循环,但我尝试这样做:将此元素向左移动,等待,将更多元素向左移动等等。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Vilx-    17 年前

    你是指这样的事情吗?

    window.onload = function moveUl()
    {
        var eUl = document.getElementById('change');
        var eLi = eUl.getElementsByTagName('li');
    
        var delta = 0;
        function move()
        {
            for(i=0;i< eLi.length;i++)
                eUl.style.marginLeft = (-300*i+delta)+'px'; 
            delta -= 100; // Prepares for the next step
            if ( delta == -1000 )
                delta = 0; // Resets after 10 steps
        } 
        setInterval(move,1000);
    }
    
        2
  •  2
  •   Josh    17 年前

    如果你想让它滑动,每次迭代都必须超时。尝试编写一个执行单次移位的函数,然后每10毫秒调用一次此函数。您还可以查看Javascript库,如 jQuery 它为移动提供了一个很好的API。

        3
  •  0
  •   hhafez    17 年前

    问题是你不能从开始的地方回来吗?

    为什么不在move中添加一个新的for循环呢

        for(i=eLi.length; i>0 ;i--){
            eUl.style.marginLeft = i*x+'px'; 
        }
    

    您是否也希望它永远循环(start->左->开始->一次又一次?