【问题标题】:jQuery - Getting color from an element and use it to another with opacityjQuery - 从一个元素中获取颜色并将其用于另一个具有不透明度的元素
【发布时间】:2014-11-22 13:36:00
【问题描述】:

基本上,我想从一个 CSS 元素(在我们的例子中为 #button)* 获取颜色,并将其用于另一个 CSS 元素(在我们的例子中为 #output)* 但带有 opacity 。我想要 rgba 中的输出,所以我可以设置 rgba 的不透明度。我的解决方案似乎不想工作......

function hex2rgb(hex, opacity) {
   var h=hex.replace('#', '');
   h =  h.match(new RegExp('(.{'+h.length/3+'})', 'g'));

   for(var i=0; i<h.length; i++)
   h[i] = parseInt(h[i].length==1? h[i]+h[i]:h[i], 16);

   if (typeof opacity != 'undefined')  h.push(opacity);

   return 'rgba('+h.join(',')+')';
}

var getcolor = $("#button").css("color");

var colour = hex2rgb(getcolor,0.3);

$(function() {
  $("#output").css("backgroundColor",colour); 
});

*见JSFiddle

【问题讨论】:

  • 首先,您的演示中没有带有#element 的元素。其次,你想用h[i] = parseInt(h[i].length == 1 ? h[i] + h[i] : h[i], 16);做什么?
  • 演示中没有id=button。这应该怎么做?
  • 好的,抱歉,已编辑,#button 。
  • @TJ 我正在尝试从#button 获取颜色到#output,但我不知道如何从#button 获取颜色并将其转换为具有不透明度的#output。我知道默认情况下,当您从 CSS 元素中获取颜色时,您会进入 rgb,我想将 rgb 旁边的 alpha 添加到新的 #output 中。
  • @charlietfl 请再看一遍。

标签: jquery css colors get opacity


【解决方案1】:

看起来您的代码根本不起作用。如果我理解了你的要求,这样的事情会起作用:

$.fn.extend({
    stealColor : function(target, opacity)
    {
        $(this).css('background-color', $(target).css('background-color') )
               .css('opacity', opacity );     

    } 
});

$('#output').stealColor('#button', 0.8);

或者如果你想窃取文字颜色:

$(this).css('background-color', $(target).css('color') )
    .css('opacity', opacity );     

fiddle

您的原始函数 hex2rgb 接受一个 rgb() 参数并产生一个 rgba() 值。

所以,修复你的代码:

function rgb2rgba(rgb, opacity) {
    return 'rgba' + rgb.substring(3, rgb.length-1) + ', ' + opacity + ')';
}
var getcolor = $("#button").css("color");
var colour = rgb2rgba(getcolor, 0.3);
$("#output").css("background-color", colour); 

fiddle

【讨论】:

  • 我将在“最坏情况”中使用它 我需要 RGBA 输出 我想设置 RGBA 的不透明度。
【解决方案2】:

您可以使用opacity 属性,而不是尝试修改rgb,如下所示:

function change(source, target, alpha) {
    var color = source.css("color");
    var sub = color.slice(0,-1).replace("rgb","rgba");
    color = sub+ ", "+alpha+")";
    target.css("background-color", color);
}

$(function () {
    change($("#button"),$("#output"), 0.5)
});
#output {
    border:1px solid black;
    width:400px;
    height:400px;
    background:#ff0; /* This needs to be replaced with #button color to rgba */
}

#button {
    color:#F54C54;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="output"></div>
<br>
<div id="button">Get color from this text</div>

【讨论】:

  • 我需要 rgba 输出,我想从 RGBA 设置不透明度 - 不想改用不透明度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2011-09-24
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多