jQuery: HEX RVB de calcul entre les différents navigateurs?
Le morceau de code suivant fonctionne parfaitement dans tous les navigateurs, bar IE. Comme à l'habitude.
C'est ce qui doit arriver:
- Lors du survol d'un lien, d'obtenir que
la couleur du lien. - Obtenir la valeur RVB de la couleur,
vu que la base de CSS sera toujours
être réglé à une valeur HEXADÉCIMALE; - Utiliser la nouvelle valeur RVB et faire des calculs afin de déterminer une teinte plus claire que la couleur
- Animer cette nouvelle teinte plus claire, sur une période de 0,5 sec.
- Lors du déplacement de la souris loin, restauration
la couleur à la valeur d'origine
Comme je l'ai dit, jusqu'à présent, le code fonctionne très bien, sauf dans IE. Quelqu'un peut-il avec un regard neuf (intacte et une racine des cheveux) de prendre un coup d'oeil à cela? Peut-il être fait de différent?
function getRGB(color) {
//Function used to determine the RGB colour value that was passed as HEX
var result;
//Look for rgb(num,num,num)
if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])];
//Look for rgb(num%,num%,num%)
if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) return [parseFloat(result[1]) * 2.55, parseFloat(result[2]) * 2.55, parseFloat(result[3]) * 2.55];
//Look for #a0b1c2
if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) return [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)];
//Look for #fff
if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) return [parseInt(result[1] + result[1], 16), parseInt(result[2] + result[2], 16), parseInt(result[3] + result[3], 16)];
}
var $oldColour;
//Get all the links I want to target
$('a').not('aside.meta a.notes_link, aside.meta ul li a, section.social_media a, footer a').hover(function() {
//code when hover over
//set the old colour as a variable so we can animate to that value when hovering away
$oldColour = $(this).css('color');
//run the getRGB function to get RGB value of the link we're hovering over
var rgb = getRGB($(this).css('color'));
for (var i = 0; i < rgb.length; i++)
//for each of the 3 HEX values, determine if the value + an increment of 30 (for a lighter colour) is lighter than the max (255)
//if it is, use the HEX value plus the increment, else use the max value
rgb[i] = Math.min(rgb[i] + 30, 255);
//join the new three new hex pairs together to form a sinle RGB statement
var newColor = 'rgb(' + rgb[0] + ',' + rgb[1] + ',' + rgb[2] + ')';
//animate the text link color to the new color.
$(this).animate({'color': newColor}, 500);
}, function() {
//code when hovering away
//animate the colour back using the old colour determined above
$(this).animate({'color': $oldColour}, 500);
});
J'ai hâte de vous entendre Gourou.
Vous devez vous connecter pour publier un commentaire.
N'ont pas IE pour tester, mais si le problème ne montre que pour la première fois, essayez d'utiliser
setTimeout
avec un très petit délai d'attente (10 ms ou plus) pour appeler votre code la deuxième fois.Aussi, il pourrait être utile juste de trouver quelle partie du code ne fonctionne pas - et je suppose que
$oldColour = $(this).css('color');
, mais ajouter un peu deconsole.log
et le savoir, il va probablement vous aider et vous pourriez même trouver quelque chose d'autre se passe que vous ne voyez pas maintenant.EDIT: quelque Chose comme ceci:
où getFromHex peut être quelque chose comme celui de http://www.richieyan.com/blog/article.php?artID=32, modifié pour qu'il fonctionne comme prévu:
$(...).css()
vous donne, définir lacolor
attribut CSS de l'élément à cette valeur et essayer de lecture - il peut vous donner des valeurs rvb.r = hex >> 16;
Avec icyrock de l'aide, c'est ce que la version finale du code ressemble à ceci: