jQuery 的動畫方法(animate)支持各種屬性的過渡,但是預設並不支持色彩的過渡,該插件正是來補足這一點! PS: 該插件支持 RGBA 顏色的過渡,但是請註意,IE8以下的版本不支持 RGBA 顏色。 color backgroundColor borderColor borderBott ...
jQuery 的動畫方法(animate)支持各種屬性的過渡,但是預設並不支持色彩的過渡,該插件正是來補足這一點!
PS: 該插件支持 RGBA 顏色的過渡,但是請註意,IE8以下的版本不支持 RGBA 顏色。
- 支持以下屬性:
- color
- backgroundColor
- borderColor
- borderBottomColor
- borderLeftColor
- borderRightColor
- borderTopColor
- outlineColor
使用方法:
載入 JavaScript 文件
首頁頁面中引入你的JQ版本,然後引入下麵的插件代碼:
<script src='jquery.animate-colors.js'></script>
調用方式:
$('#demodiv').animate({ color:'#E4D8B8' }) $('#demodiv').animate({ backgroundColor:'#400101' }) $('#demodiv').animate({ borderBottomColor:'#00346B' }) $('#demodiv').animate({ borderColor:'#F2E2CE' }) $('#demodiv').animate({ color:'rgba(42, 47, 76, 0.1)' })
下麵貼一下不同的jquery版本,使用該插件的版本不一樣,如下:
jQuery Animate colors (適用於 jQuery 1.8 以上版本):《下載地址》
jQuery Animate colors (適用於 jQuery 1.7.2 以下版本):《下載地址》
這兒貼一下適用於jquery1.8以上版本的源碼:
(function($) { /** * Check whether the browser supports RGBA color mode. * * Author Mehdi Kabab <http://pioupioum.fr> * @return {boolean} True if the browser support RGBA. False otherwise. */ function isRGBACapable() { var $script = $('script:first'), color = $script.css('color'), result = false; if (/^rgba/.test(color)) { result = true; } else { try { result = ( color != $script.css('color', 'rgba(0, 0, 0, 0.5)').css('color') ); $script.css('color', color); } catch (e) { } } return result; } $.extend(true, $, { support: { 'rgba': isRGBACapable() } }); var properties = ['color', 'backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'outlineColor']; $.each(properties, function(i, property) { $.Tween.propHooks[ property ] = { get: function(tween) { return $(tween.elem).css(property); }, set: function(tween) { var style = tween.elem.style; var p_begin = parseColor($(tween.elem).css(property)); var p_end = parseColor(tween.end); tween.run = function(progress) { style[property] = calculateColor(p_begin, p_end, progress); } } } }); // borderColor doesn't fit in standard fx.step above. $.Tween.propHooks.borderColor = { set: function(tween) { var style = tween.elem.style; var p_begin = []; var borders = properties.slice(2, 6); // All four border properties $.each(borders, function(i, property) { p_begin[property] = parseColor($(tween.elem).css(property)); }); var p_end = parseColor(tween.end); tween.run = function(progress) { $.each(borders, function(i, property) { style[property] = calculateColor(p_begin[property], p_end, progress); }); } } } // Calculate an in-between color. Returns "#aabbcc"-like string. function calculateColor(begin, end, pos) { var color = 'rgb' + ($.support['rgba'] ? 'a' : '') + '(' + parseInt((begin[0] + pos * (end[0] - begin[0])), 10) + ',' + parseInt((begin[1] + pos * (end[1] - begin[1])), 10) + ',' + parseInt((begin[2] + pos * (end[2] - begin[2])), 10); if ($.support['rgba']) { color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1); } color += ')'; return color; } // Parse an CSS-syntax color. Outputs an array [r, g, b] function parseColor(color) { var match, triplet; // Match #aabbcc if (match = /#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/.exec(color)) { triplet = [parseInt(match[1], 16), parseInt(match[2], 16), parseInt(match[3], 16), 1]; // Match #abc } else if (match = /#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/.exec(color)) { triplet = [parseInt(match[1], 16) * 17, parseInt(match[2], 16) * 17, parseInt(match[3], 16) * 17, 1]; // Match rgb(n, n, n) } else if (match = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) { triplet = [parseInt(match[1]), parseInt(match[2]), parseInt(match[3]), 1]; } else if (match = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9\.]*)\s*\)/.exec(color)) { triplet = [parseInt(match[1], 10), parseInt(match[2], 10), parseInt(match[3], 10),parseFloat(match[4])]; // No browser returns rgb(n%, n%, n%), so little reason to support this format. } return triplet; } })(jQuery);
官網地址:https://bitstorm.org/jquery/color-animation/