2013-07-07 62 views
0

做一個表單驗證。如果字段未通過驗證,我希望更改顏色並動搖字段。我的代碼:jQuery動畫不會晃動元素

$('#'+vet) 
.css({'background-color':'yellow','border-color':'red'}) 
.animate({ left: "-10px" }, 100).animate({ left: "10px" }, 100) 
.animate({ left: "-10px" }, 100).animate({ left: "10px" }, 100) 
.animate({ left: "0px" }, 100); 

它確實會改變字段背景和邊框顏色,但字段不會晃動。

有什麼想法?

+2

或者,使用jQuery UI的搖動效果。 http://api.jqueryui.com/shake-effect/ – Thew

回答

1

使用左,上,右,下的屬性來改變元件的位置,它也必須有一個定位上下文:

.element { position: relative; } 

.element { position: absolute; } 

.element { position: fixed; } 

根據您的需求。

1

嘗試中,你可以傳遞到animate()方法的回調方法連接的動畫,而不是直接鏈接的動畫在一起。 jQuery文檔狀態:

如果提供,完成回調函數會在動畫完成後觸發。這>可以用於按順序將不同的動畫串起來。

我猜它目前不動的原因是它試圖在相反的方向同時動畫。這是未經測試,但嘗試:

$('#' + vet).css({'background-color':'yellow', 'border-color':'red' }) 
.animate({ left: '-=10px'}, 100, function() { 
    $('#' + vet).animate({left: '+=20px'}, 100, function() { 
    $('#' + vet).animate({left: '-=20px'}, 100, function() { 
     $('#' + vet).animate({left: '+=10px'}, 100); 
    }); 
    }); 
}); 

使用+=也消除了設置相對位置。現在每個動畫都會在最後一個動畫完成時執行。

編輯:.animate().animate()似乎是相同的,因爲這畢竟。

+1

對同一元素上的動畫不需要使用回調。所有jQuery動畫方法(不只是'.animate()')被設計爲如果在同一個元素上使用,則自動將一個接一個地排隊,因此鏈接是正確和正常的方式。如果要在第一個動畫完成後爲第二個元素製作動畫,則需要使用回調 - 否則多個元素上的動畫效果將同時發生。 _「使用+ =也可以消除相對位置的設置。」 - - 否。 – nnnnnn