我們知道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){ }); } });