jQuery 给我们 RGB,而不是 HEX
jQuery 将在请求时返回一个rgb
值。#CCC
例如,如果您将背景颜色设置为#CCC
,然后使用 jQuery 请求它:
$(".foo").css("backgroundColor"); // rgb(204, 204, 204)
从 RGB 获取 HEX
这意味着您需要有一种方法将 rgb 转换回 HEX。这个问题已经在 Stack Overflow 上被问及并得到了回答。请参阅使用 jQuery 获取 HEX 值而不是 RGB 值。出于我们的目的,我们可以使用以下函数:
//Function to convert hex format to a rgb color
function rgb2hex(rgb){
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
return "#" +
("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[3],10).toString(16)).slice(-2);
}
使平滑的背景颜色动画成为可能
这将负责检索和比较。接下来,您需要加载$.animate()
稍微扩展该方法的 jQuery UI 核心。
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui..."></script>
动画背景颜色
使用 jQuery UI 的核心就地(此处为完整路径),您可以执行以下操作:
$(".foo").animate({ backgroundColor: "#999999" }, 1000);
这将#999999
在一秒钟内逐渐为背景设置动画。
现在都在一起了
所以最后我们有以下内容(假设 jQuery UI 的核心是链接的):
//Function to convert hex format to a rgb color
function rgb2hex(rgb){
rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
return "#" +
("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +
("0" + parseInt(rgb[3],10).toString(16)).slice(-2);
}
$("#hello").on("click", function(e){
background = rgb2hex( $(this).css("backgroundColor") );
if ( background == '#cccccc' ) {
$(this).animate({
backgroundColor: "#123456",
color: "#fff"
}, 1000);
}
});
在线演示:http: //jsbin.com/uwiyon/edit#javascript,html