将RGB颜色值转换为0.75 alpha的RGBA颜色值

20

我有以下代码可以获取一个元素的背景色。

var currentColor = $(this).css('background-color');

现在我想把它转换成 rgba 并以 0.75 的 alpha 值显示,类似于 rgba(123,123,123,0.75),你有什么建议吗?


你考虑过正则表达式吗? - nicolallias
дҪ жғіжҠҠе®ғж”№жҲҗrgbaиҖҢдёҚжҳҜдҪҝз”ЁjQueryзҡ„$.fadeToеҮҪж•°пјҢжңүд»Җд№ҲеҺҹеӣ еҗ—пјҹrgbaеңЁж—§жөҸи§ҲеҷЁдёӯж— жі•е·ҘдҪңгҖӮжҲ‘дјҡж”№дёәдҪҝз”Ё$(this).fadeTo(0, 0.75)гҖӮ - ninja
@ninja,你能把你的评论提交为答案吗?这样我就可以点赞了。如果你已经在使用jQuery,那么这是一个更好的解决方案。 - Anton
3个回答

31

由于jQuery似乎总是返回没有alpha通道的元素的颜色,如rgb(r, g, b),因此您可以简单地使用:

由于jQuery似乎总是为没有alpha通道的元素返回颜色值,类似于rgb(r, g, b),所以您可以简单地使用以下代码:

$(this).css('background-color').replace(')', ', 0.75)').replace('rgb', 'rgba');

请确保背景颜色当前不是rgba:

var bg = $(this).css('background-color');
if(bg.indexOf('a') == -1){
    var result = bg.replace(')', ', 0.75)').replace('rgb', 'rgba');
}

注意,如果this没有设置背景颜色,css('background-color')将返回undefined - Andre Figueiredo
1
我已经添加了一个jsperf测试,展示了使用replacesubstr来实现这一点的差异。显然,substr是赢家。https://jsperf.com/replace-rbg-with-rgba - ctrlplusb

2

http://regex101.com/r/lT9iM4

var re = /(rgb)\(([0-9]+),\s+([0-9]+),\s+([0-9]+)/; 
var currentColor = $(this).css('background-color');
var subst = 'rgba($2,$3,$4,0.75'; 

$(this).css('background-color', currentColor.replace(re, subst));

另一种使用正则表达式的解决方案。但是正如 Cerbrus 所提到的,对于这么简单的事情使用正则表达式有些过度。


currentColor.replace(re, subst) 对我来说返回了类似于这样的东西: "rgb(255, 255, 255)" - Cerbrus
currentColor.replace(re, subst) --> "rgba(rgb,255,255,0.75)"。对于这两个替换操作,正则表达式实在是过于复杂了。 - Cerbrus
1
修复了替换函数。添加了过度使用的注释 ;) - Henrik Peinar

2

另一个正则表达式尝试 http://jsfiddle.net/hc3BA/

var colour = 'rgb(123,123,123)',
new_col = colour.replace(/rgb/i, "rgba");
new_col = new_col.replace(/\)/i,',0.75)');

如果你只是匹配一个确切的字符串,那么正则表达式可能有些过于复杂了。 - Cerbrus
2
建议,概念验证,随意改进代码。 - nicolallias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接