【问题标题】:Get the resulted background color of a semi-transparent black div?获取半透明黑色 div 的结果背景颜色?
【发布时间】:2014-05-22 07:41:22
【问题描述】:

我有一个 div 元素,它设置了黑色背景色和一个小的不透明度,可以与各种网站背景(白色、灰色、绿色等)融为一体。有什么办法可以得到该元素的计算颜色?我指的是用户可以看到的颜色(即不透明度+元素背景颜色+站点背景颜色的组合)。

当然,这必须通过 JavaScript 来完成,但我找不到这样做的方法或插件。我知道 JS 中的 backgroundColor,但这只会返回 background-color CSS 值:black

这是一个例子: http://jsfiddle.net/N6EB8/

非常感谢!

PS:我希望我已经足够清楚了。如果没有,请告诉我。

【问题讨论】:

  • 请显示您已经尝试过的代码。
  • @watt 请试试看这个one
  • 这不是一个小问题。颜色混合是相对简单的数学运算,但是将 alpha 值添加到计算的一侧或两侧会很棘手。
  • 我添加了一个 jsfiddle 链接以获得更好的解释。 @tokyovariable 我还没试过,因为我不知道怎么做。
  • 看起来您必须根据顶层的不透明度和颜色以及基色来计算该颜色。它肯定使用某种颜色混合,如果我们知道它,我们可能有计算输出颜色的公式。

标签: javascript jquery css jquery-plugins colors


【解决方案1】:

您可以创建一个隐藏的画布元素,其宽度为 100 像素,高度为 1 像素,从前景色(本例中为黑色)到背景色(本例中为白色)呈线性渐变。

然后您可以使用 ctx.getImageData() 来获取渐变上给定点的颜色。您使用的 x 坐标将与 div 的不透明度相同,但乘以 100。

getImageData() 返回的数据可以直接用于 'rgba' 格式的背景颜色值。

<div id="myDiv" style="opacity:0.3;"></div>

然后是javascript:

//get the div's opacity
var myDiv = document.getElementById('myDiv');
var divOpc = myDiv.style.opacity;
/*
  To get the opacity, you'll probably want to use 
  jquery's $(myDiv).css('opacity'), unless the opacity is in 
  the 'style' attribute.
  If you wanted to keep it vanilla JS, you could use getComputedStyle().
*/


//create hidden canvas
var cvs = document.createElement('canvas');
cvs.style.display = 'none';
cvs.width = 100;
cvs.height = 1;
document.body.appendChild(cvs);

//give canvas a gradient
var ctx = cvs.getContext('2d');
var grd = ctx.createLinearGradient(0,0,100,0);
grd.addColorStop(0,'black'); //foreground colour
grd.addColorStop(1,'white'); //background colour
/*
  If you wanted to make this dynamic, you would get the 
  current background colour of the foreground/background element, 
  instead of hard-coding a colour.
*/
ctx.fillStyle = grd;
ctx.fillRect(0,0,100,1);

//The Magic!
var imgData = ctx.getImageData((100 - divOpc*100),0,1,1);
var formattedBG = 'rgba('+imgData.data[0]+','+imgData.data[1]+','+imgData.data[2]+',1)';
//Do something with that discovered bg colour.
//As an example: Give the background to a different div
var bgRecipient = document.getElementById('bgRecipient');
bgRecipient.style.backgroundColor = formattedBG;

工作 jsFiddle:http://jsfiddle.net/zbC9u/6/

编辑:我更新了小提琴以更加匹配你的。

【讨论】:

  • 这里建议使用所谓的Canvas,它只在HTML5中支持,这里值得注意。
  • @KingKing 是正确的。由于使用了画布元素,这在 IE8 及更低版本中不起作用。
猜你喜欢
  • 2011-06-11
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
相关资源
最近更新 更多