使用JS更改CSS RGBA背景颜色的alpha值

Cho*_*itu 3 html javascript css colors rgba

我的CSS中有这个:

.body {
    width: 150px;
    height: 40px;
    padding: 20px;
    background-color: rgba(255,0,0,1);
    text-align: center;
    border: 1px solid black;
    border-top-left-radius: 15px;
    border-top-right-radius: 15px;
    display: block;
    top: 50px;
    font-weight: bold;
    font-size: 25px;
}
Run Code Online (Sandbox Code Playgroud)

我想在用户单击按钮时更改 的background-color不透明度 ( ):alpha

<button onclick="lessColour()">-Colour</button>
Run Code Online (Sandbox Code Playgroud)

如何创建此lessColour()功能,以便每次用户单击按钮时, 的background-coloralpha都会减少0.1

顺便说一句,我必须用 3 个不同的元素来做到这一点。

Dan*_*ger 5

您需要创建一个带有两个参数的函数:

  • 您想要更改其不透明度的元素(或多个元素)background-color,以便您可以同时在多个元素中执行此操作。

  • 您想要更改的金额alpha(如果为正则增加,如果为负则减少)。

为了获得当前的 alpha 值,您需要:

  1. 使用getComputedStylegetPropertyValue获取当前background-color值。

  2. 解析该值以获取组件alpha

  3. background-color使用更新元素element.style.backgroundColor

总而言之,它看起来像这样:

// First, get all your elements:

const a = document.getElementById('a');
const b = document.getElementById('b');
const c = document.getElementById('c');


// And the buttons to update them:

const decreaseA = document.getElementById('decrease-a');
const decreaseAB = document.getElementById('decrease-ab');
const decreaseABC = document.getElementById('decrease-abc');

const increaseA = document.getElementById('increase-a');
const increaseAB = document.getElementById('increase-ab');
const increaseABC = document.getElementById('increase-abc');

const decreaseAll = document.getElementById('decrease-all');
const increaseAll = document.getElementById('increase-all');


// Define your function:

function updateColor(elements, change) {

  // Make sure elements is always an Array, so that you can call the
  // function with either an Array of elements or a single one (without
  // having to wrap it in an Array yourself.
  
  elements = Array.isArray(elements) ? elements : [elements];
 
  // Process all elements:
 
  elements.forEach(element => {
    // Get the current background-color value:
    const value = getComputedStyle(element).getPropertyValue("background-color");
    
    // Get all color components (alpha may not be there if = 1):
    const parts = value.match(/[\d.]+/g);
    
    // If alpha is not there, add it:
    if (parts.length === 3) {
      parts.push(1);
    }
    
    // Modify alpha:
    parts[3] = Math.min(1, Math.max(0, parseFloat(parts[3]) + change));
    
    // Set the element's text to be the current alpha value (just for the example):
    element.innerText = parts[3].toFixed(2);
    
    // Apply new value:
    element.style.backgroundColor = `rgba(${ parts.join(',') })`;
  });
}


// Add event handlers for the buttons that will call the function with the right params:

decreaseA.onclick = () => updateColor(a, -0.1);
decreaseAB.onclick = () => updateColor(b, -0.1);
decreaseABC.onclick = () => updateColor(c, -0.1);

increaseA.onclick = () => updateColor(a, 0.1);
increaseAB.onclick = () => updateColor(b, 0.1);
increaseABC.onclick = () => updateColor(c, 0.1);

decreaseAll.onclick = () => updateColor([a, b, c] , -0.1);
increaseAll.onclick = () => updateColor([a, b, c], 0.1);


// Set the initial text inside each sample without modifying the color (just for the example):

updateColor([a, b, c] , 0);
Run Code Online (Sandbox Code Playgroud)
body {
  margin: 0;
  font-family: monospace;
}

.samples {
  overflow: hidden;
}

.buttons {
  overflow: hidden;
  border: 2px solid #FFF;
}

span {
  float: left;
  width: 33.33333333%;
  line-height: 100px;
  height: 100px;
  text-align: center;
}

button {
  float: left;
  width: 33.33333333%;
  background: #000;
  color: #FFF;
  border: none;
  line-height: 32px;
  font-family: monospace;
  outline: none;
  border: 2px solid #FFF;
}

#decrease-all,
#increase-all {
  width: 50%;
}

#a { background: rgba(255, 0, 0, 1); }
#b { background: rgba(0, 255, 0, 1); }
#c { background: rgba(0, 0, 255, 1); }
Run Code Online (Sandbox Code Playgroud)
<div class="samples">
  <span id="a"></span>
  <span id="b"></span>
  <span id="c"></span>
</div>

<div class="buttons">
  <button id="increase-a">INCREASE A</button>
  <button id="increase-ab">INCREASE B</button>
  <button id="increase-abc">INCREASE C</button>
  <button id="decrease-a">REDUCE A</button>
  <button id="decrease-ab">REDUCE B</button>
  <button id="decrease-abc">REDUCE C</button>
  <button id="increase-all">INCREASE ALL</button>
  <button id="decrease-all">REDUCE ALL</button>
</div>
Run Code Online (Sandbox Code Playgroud)