我們知道jQuery幾乎是我們最常用的javascript庫了,不過盡管他自己本身擁有大量的特效,但卻仍然缺少一些動畫效果。比如說,顏色、背景顏色的變換。
animate一般只支持大小,位置,透明度的變化
今天看到新浪微博在微博發布框無內容時,點擊發布按鈕,發布框會有背景顏色閃爍,產生警示的效果,友好的用戶體驗就想模仿一下。
於是又糾結了一天。。。
剛開始我用jQuery的fadeIn和fadeOut,很快的就能達到效果。但是我發現,微博那里是逐漸地改變背景顏色實現的,而fadeIn跟fadeOut是通過逐漸改變alpha即透明度實現。所以開始糾結中。。
然后,寫了段代碼
var color = function(){};
color.fadeIn = function(a){
if(a>=255){
$('#input').css('backgroundColor', 'gba('+a+','+a+','+a+')');
a++;
setTimeout(color.fadeIn(a), 20);
} else {
setTimeout(color.fadeOut(a), 20);
}
}
color.fadeOut = function(a){
// 此處省略
}
簡單說,我是想實現,比如rgb(a, a, a)遞增至rgb(255, 255, 255) 再遞減至 rgb(a, a, a)
但是效果差很多,一測試顏色沒變化。
於是,打了一段測試代碼
setTimeout($('#input').css('backgroundColor', 'red'), 1000);
setTimeout($('#input').css('backgroundColor', 'black'), 2000);
打開瀏覽器,直接就是黑色,並沒有從紅色跳到黑色。
。。。
后來 找到jQuery的一個插件叫jquery.color.js里面重寫了backgroundColor,color,boderColor等屬性顏色的animate效果
於是問題可以這樣解決 :
$('#input').animate({backgroundColor:'red'}, 1000);
這樣就可以從原始的背景顏色逐漸變成紅色的效果。
很神奇啊,開始研究jquery.color.js的源代碼。
先附上用jquery.color.js實現的顏色閃爍的警示效果代碼
$('.publish a').click(function(){
var content = $('textarea').val();
if(content==""){
$('#input').stop(false, true).animate({backgroundColor:'#FF9966'}, 250)
.animate({backgroundColor:'#FFF'}, 200)
.animate({backgroundColor:'#FF9966'}, 250)
.animate({backgroundColor:'#FFF'}, 200);
} else {
$.post(url, {input:content},function(data){
});
}
});
