我正在寻找检查元素上背景色的值的方法,如果该值是rgba值,我想获取Alpha通道并查看其值是否小于1。但是如果背景色不是,则返回/退出。不是rgba值,即它是十六进制值还是rgb值。
我觉得正则表达式是实现此目的的最佳方法,但是经过一番挠头之后,我感到茫然,而正则表达式并不是我的最强技能!
这是我已经拥有的,TODO是我需要一点帮助的事情
var hasOpacity = false;
var backgroundColor = $('.elemment-class').css('background-color');
// backgroundColor could return:
// (string / bool)
// - null - IGNORE
// - transparent - IGNORE
// - #000 - IGNORE
// - #FFFFFF - IGNORE
// - rgb(0,0,0) - IGNORE
// - rgba(0, 0, 0, 0.4)
// ^ I need this value if it's floating
// - rgba(0, 0, 0, 1)
// ^ Or this value if it's integer
function checkIfBackgroundHasAlpha(backgroundColor) {
// @TODO If background value is any of the "IGNORE"s return because we don't need to do anything
// only continue if the value is rgba
// Its rgba so lets process
if (isAplpa === true) {
// @TODO First grab the alpha section of the rgba colour (REGEX perhaps?)
// i.e rgba(255, 255, 255, 0.4)
// ^
// or rgba(6, 39, 123, 1)
// ^
// @TODO Then convert that value from a string to a number
// Then run my validation
if (alphaNumber < 1) {
// Now that I know it's got an opacity lets do what I need plus
// set our var to true for later use
hasOpacity = true;
}
}
}
// Run the check
checkIfBackgroundHasAlpha(backgroundColor);
if (hasOpacity) {
// Yay we're here
console.log('Yep we have Opacity on this');
}
谢谢
最佳答案
您根本不需要正则表达式,实际上,如果您有一组特定的输入类型,则可以大大简化此方法。
function hasOpacity(str) {
if (str) {
var tmp = str.split(',')[3];
if (tmp) {
var val = parseFloat(tmp);
return (!isNaN(val) && val < 1);
}
}
return false;
}
hasOpacity("rgba(0, 0, 0, 0.4)"); //true
hasOpacity("rgba(0,0,0,1)"); //false
hasOpacity(null); //false
hasOpacity("#FFFFFF"); //false
关于javascript - 将Alpha值与背景色隔离,从字符串转换为数字,然后验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31564460/