jquery.color-RGBa-patch.js
上传用户:urdevil
上传日期:2022-07-20
资源大小:7k
文件大小:5k
源码类别:

JavaScript

开发平台:

Others

  1. /*
  2.  * jQuery Color Animations
  3.  * Copyright 2007 John Resig
  4.  * Download by http://www.codefans.net
  5.  * Released under the MIT and GPL licenses.
  6.  */
  7. (function(jQuery){
  8. // We override the animation for all of these color styles
  9. jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
  10. jQuery.fx.step[attr] = function(fx){
  11. if ( fx.colorFunction == undefined || fx.state == 0 ) {
  12. fx.start = getColor( fx.elem, attr );
  13. fx.end = getRGB( fx.end );
  14. if ( fx.start == undefined ) {
  15. fx.start = [ 255,255,255,0 ];
  16. } else { 
  17. if ( fx.start[3] == undefined ) // if alpha channel is not spotted
  18. fx.start[3] = 1; // assume it is fully opaque
  19. if ( fx.start[3] == 0 ) // if alpha is present and fully transparent
  20. fx.start[0] = fx.start[1] = fx.start[2] = 255; // assume starting with white
  21. }
  22. if ( fx.end[3] == undefined ) // if alpha channel is not spotted
  23. fx.end[3] = 1;  // assume it is fully opaque
  24. fx.colorFunction = ( fx.start[3] == 1 && fx.end[3] == 1 ? calcRGB : calcRGBa ); 
  25. }
  26. fx.elem.style[attr] = fx.colorFunction();
  27. }
  28. });
  29. var calcRGB = function() {
  30. return 'rgb(' + 
  31. Math.max(Math.min( parseInt((this.pos * (this.end[0] - this.start[0])) + this.start[0]), 255), 0) + ',' +
  32. Math.max(Math.min( parseInt((this.pos * (this.end[1] - this.start[1])) + this.start[1]), 255), 0) + ',' + 
  33. Math.max(Math.min( parseInt((this.pos * (this.end[2] - this.start[2])) + this.start[2]), 255), 0) + ')';
  34. };
  35. var calcRGBa = function() {
  36. return 'rgba(' + 
  37. Math.max(Math.min( parseInt((this.pos * (this.end[0] - this.start[0])) + this.start[0]), 255), 0) + ',' +
  38. Math.max(Math.min( parseInt((this.pos * (this.end[1] - this.start[1])) + this.start[1]), 255), 0) + ',' + 
  39. Math.max(Math.min( parseInt((this.pos * (this.end[2] - this.start[2])) + this.start[2]), 255), 0) + ',' +
  40. Math.max(Math.min( parseFloat((this.pos * (this.end[3] - this.start[3])) + this.start[3]), 1), 0) + ')';
  41. };
  42. // Color Conversion functions from highlightFade
  43. // By Blair Mitchelmore
  44. // http://jquery.offput.ca/highlightFade/
  45. // Parse strings looking for color tuples [255,255,255]
  46. function getRGB(color) {
  47. var result;
  48. // Check if we're already dealing with an array of colors
  49. if ( color && color.constructor == Array && color.length >= 3 )
  50. return color;
  51. // Look for rgb(num,num,num)
  52. if (result = /rgba?(s*([0-9]{1,3})s*,s*([0-9]{1,3})s*,s*([0-9]{1,3})s*,?s*((?:[0-9](?:.[0-9]+)?)?)s*)/.exec(color))
  53. return [ parseInt(result[1]), parseInt(result[2]), parseInt(result[3]), parseFloat(result[4]||1) ];
  54. // Look for rgb(num%,num%,num%)
  55. if (result = /rgba?(s*([0-9]+(?:.[0-9]+)?)%s*,s*([0-9]+(?:.[0-9]+)?)%s*,s*([0-9]+(?:.[0-9]+)?)%s*,?s*((?:[0-9](?:.[0-9]+)?)?)s*)/.exec(color))
  56. return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55, parseFloat(result[4]||1)];
  57. // Look for #a0b1c2
  58. if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
  59. return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
  60. // Look for #fff
  61. if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
  62. return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
  63. // Otherwise, we're most likely dealing with a named color
  64. var colorName = jQuery.trim(color).toLowerCase();
  65. if ( colors[colorName] != undefined )
  66. return colors[colorName];
  67. return [ 255, 255, 255, 0 ];
  68. }
  69. function getColor(elem, attr) {
  70. var color;
  71. do {
  72. color = jQuery.curCSS(elem, attr);
  73. // Keep going until we find an element that has color, or we hit the body
  74. if ( color != '' && color != 'transparent' || jQuery.nodeName(elem, "body") )
  75. break; 
  76. attr = "backgroundColor";
  77. } while ( elem = elem.parentNode );
  78. return getRGB(color);
  79. };
  80. // Some named colors to work with
  81. // From Interface by Stefan Petre
  82. // http://interface.eyecon.ro/
  83. var colors = {
  84. aqua:[0,255,255],
  85. azure:[240,255,255],
  86. beige:[245,245,220],
  87. black:[0,0,0],
  88. blue:[0,0,255],
  89. brown:[165,42,42],
  90. cyan:[0,255,255],
  91. darkblue:[0,0,139],
  92. darkcyan:[0,139,139],
  93. darkgrey:[169,169,169],
  94. darkgreen:[0,100,0],
  95. darkkhaki:[189,183,107],
  96. darkmagenta:[139,0,139],
  97. darkolivegreen:[85,107,47],
  98. darkorange:[255,140,0],
  99. darkorchid:[153,50,204],
  100. darkred:[139,0,0],
  101. darksalmon:[233,150,122],
  102. darkviolet:[148,0,211],
  103. fuchsia:[255,0,255],
  104. gold:[255,215,0],
  105. green:[0,128,0],
  106. indigo:[75,0,130],
  107. khaki:[240,230,140],
  108. lightblue:[173,216,230],
  109. lightcyan:[224,255,255],
  110. lightgreen:[144,238,144],
  111. lightgrey:[211,211,211],
  112. lightpink:[255,182,193],
  113. lightyellow:[255,255,224],
  114. lime:[0,255,0],
  115. magenta:[255,0,255],
  116. maroon:[128,0,0],
  117. navy:[0,0,128],
  118. olive:[128,128,0],
  119. orange:[255,165,0],
  120. pink:[255,192,203],
  121. purple:[128,0,128],
  122. violet:[128,0,128],
  123. red:[255,0,0],
  124. silver:[192,192,192],
  125. white:[255,255,255],
  126. yellow:[255,255,0]
  127. };
  128. })(jQuery);