gpt4 book ai didi

jQuery:HEX 到 RGB 计算在浏览器之间不同?

转载 作者:行者123 更新时间:2023-12-01 02:36:57 26 4
gpt4 key购买 nike

下面的代码在所有浏览器(IE 除外)中都能完美运行。照常。这是需要发生的事情:

  1. 将鼠标悬停在链接上时,获取该信息链接颜色。
  2. 获取该颜色的RGB值,看到基本 CSS 总是设置为十六进制值;
  3. 使用新的 RGB 值并进行计算以确定该颜色的较浅色度
  4. 在 0.5 秒内为新的浅色阴影添加动画
  5. 当鼠标移开时,恢复颜色恢复为原始值

正如我所说,到目前为止,代码工作得非常好,除了 IE 之外。任何拥有一双新鲜眼睛(和完整发际线)的人都可以看一下这个吗?可以做不同的事情吗?

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);
});

我期待着您大师的来信。

最佳答案

没有 IE 来测试它,但如果问题仅在第一次出现,请尝试使用 setTimeout 和一个非常小的超时(10ms 左右)来第二次调用您的代码。

此外,可能值得找出代码的哪一部分不起作用 - 我想 $oldColour = $(this).css('color');,但添加一些 console.log 并找出来,它可能会有所帮助,您甚至可能会发现正在发生一些您现在看不到的事情。

编辑:类似这样的:

$oldColour = $(this).css('color');
var rgb;
if($oldColour.substring(0, 3) == 'rgb') {
rgb = getRGB($oldColour);
} else { // it's a hex
rgb = getFromHex($oldColour);
}

其中 getFromHex 可以类似于 http://www.richieyan.com/blog/article.php?artID=32 中的那个,修改为按您期望的方式工作:

function hex2rgb(hexStr){
// note: hexStr should be #rrggbb
var hex = parseInt(hexStr.substring(1), 16);
var r = (hex & 0xff0000) >> 16;
var g = (hex & 0x00ff00) >> 8;
var b = hex & 0x0000ff;
return [r, g, b];
}

关于jQuery:HEX 到 RGB 计算在浏览器之间不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4262417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com