2011-08-25 43 views
0

我有下面的當前功能,但覺得有一個更好的方式來寫同樣的事情。我正在尋找一些有關編寫下面相同函數的最優化方式的一些見解,以及爲什麼。比setInterval更好的方法嗎?

注意這是$(function(){});

m = function(){ 
    $("#id").animate({marginRight : 0}, 'slow', function(){ 
     $("#id").animate({marginRight : "15px"}, 'slow'); 
    }) 
} 
setInterval(m, 700)  

回答

3
m = function(){ 
    $("#id").animate({marginRight : 0}, 'slow', function(){ 
     $("#id").animate({marginRight : "15px"}, 'slow',m); 
    }); 
} 
m(); 

似乎裏面所有的基礎上,你在做什麼,你要切換隨着時間的推移元素的運動。當第二個內部動畫完成時,您可以將原始功能m()設置爲要執行的回調。

+2

這是如何兌現700毫秒的延遲? – Marc

+0

看起來這是用來在動畫完成後首先激活切換。這個數字並不重要,除非我誤解代碼 – Maz

+0

@Maz你是正確的,這個數字真的不重要,我只是想在函數完成後重新調用這個函數。 – jeffreynolte

1

您可以即興創建在第一個動畫回調中使用this而不是再次找到它。除此之外,我不認爲可以在這裏完成任何進一步的改進。

m = function(){ 
    $("#id").animate({marginRight : 0}, 'slow', function(){ 
     $(this).animate({marginRight : "15px"}, 'slow'); 
    }) 
} 
setInterval(m, 700); 
3
(function m(){ 
    $("#id").animate({marginRight : 0}, 'slow', function(){ 
     $(this).animate({marginRight : "15px"}, 'slow',function(){ 
      setTimeout(m,700); 
     }); 
    }); 
})(); 

編輯:

它使用的setTimeout,但是,setTimeout的比setInterval的一個更好的解決方案,因爲如果在上一個完整隻會排隊一個新的。這將有助於防止jQuery 1.6當前使用的RAF問題。