2012-10-21 66 views
2

我正在嘗試使用jQuery實現「動畫動畫」。這個想法是,你可以做一個元素搖擺來吸引注意力。下面是我想出了:更好的方式來實現搖動動畫?

function DrawAttention(item, count) 
    { 
     $(item).animate({top: '+=5'}, 50, 
      function(){ 
       $(item).animate({top: '-=10'}, 100, 
        function(){ 
         $(item).animate({top: '+=5'}, 50, 
          function(){ 
           if(count>0) 
           { 
            DrawAttention(item,count-1); 
           } 
          }); 
        }); 
      }); 

    } 

我認爲這是一個有點冗長,不知道是否有人能看到一個更優雅的方式來達到我想要的。

小提琴here

+0

BTW您的JS-小提琴比如你通過了jQuery對象$(「#項目」)到您的DrawAttention方法和包裹它第二次使用jQuery,您只需要通過字符串「#item」 – Ozzy

回答

6
function DrawAttention(item, count) 
{ 
    $(item) 
     .animate({top: '+=5'}, 50) 
     .animate({top: '-=10'}, 100) 
     .animate({top: '+=5'}, 50, function(){ 
      if(count > 0){ 
       DrawAttention(item,count-1); 
      } 
     }); 
} 
+1

該方法在開始下一個動畫之前不會等待一個動畫完成 – Ozzy

+2

您錯了,請在http://api.jquery.com/animate/上搜索「鏈式動畫」。但它確實不起作用,我打錯了if語句中的'>'符號。如果你將當前的代碼粘貼到小提琴上,它就會起作用。 – pckill

+0

正常工作正確'if' – charlietfl

0

據我所知在jQuery Ui(jqueryui.com)中有這樣的效果。嘗試這將是一個替代方案。

如果你想自己做這個,我會使用指數函數(如2^-x)來計算抖動偏移量。

+0

這不是一個很好的振動方程http://www.wolframalpha.com/input/?i=y%3D2^-x – Ozzy

+0

順便說一句,我的意思是:offset = Math.pow(2,迭代)*(迭代% 2-1); – tobspr

+0

你寫了y = 2^-x,鏈接沒有包含^ -x。這更多的是一個信封,而不是一個動搖。你需要一個正弦才能搖一搖 – Ozzy