2013-02-22 51 views
0

我正在尝试使用jQuery在页面上动画云,并在它们离开最左侧时将它们移动到页面的末尾。jQuery this()循环问题

<div class="sprite cloud" id="cloud-1"> </div> 

 

$(function() { 
    function runIt() { 

    $(".cloud").each(function(){ 

     var speed = 20; 
     var Position = this.position().left; 
     var Width = this.width(); 
     if((Position + Width) < 0) 
     { 
      Position = $(document).width(); 
      this.css("left", Position); 
     } 

    }); 

    $('#clouds').animate({"left": Position-speed},1000, "linear", runIt)} 
    runIt(); 
}); 

它的工作原理,如果我使用$( '#云-1'),等等,但如果我尝试使用每个()。我得到那个说

对象#有没有方法“位置”

我得到同样的错误任何功能,如胶印()的错误。

$(this)而不是解决它。

新代码:

$(function() { 
    function runIt() { 

    $(".cloud").each(function(){ 

    var speed = 20; 
    var cloudPosition = $(this).position().left; 
    var cloudWidth = $(this).width(); 

    if((cloudPosition + cloudWidth) < 0) 
    { 
     cloudPosition = $(document).width(); 
     $(this).css("left", cloudPosition); 
    } 

    $(this).animate({"left": cloudPosition-speed},1000, "linear", runIt) 

    }); 


} 

    setInterval(runIt, 1000) 
}); 

它只是现在动画一次。我认为这是因为runIt回调现在在一个循环中。我试图把它移到循环之外,但没有奏效。使用setInterval的工程确定,但很可能是不正确的方式

回答

4

.position是jQuery的对象的方法,并thiseach是一个DOM对象。

您需要使用width$(this).position

而同样和css

+0

这是或多或少吧!它不会循环,但它只有一个。有任何想法吗? – evandentremont 2013-02-22 13:40:25

+0

@EPICWebDesign,你可以发布完整的代码吗? – Dogbert 2013-02-22 13:48:45

+0

它在那里。这是测试网站:http://dev.napkinworks.ca/snowislandedu/ – evandentremont 2013-02-22 13:51:53