css 背景颜色变换器

bvjveswy  于 2023-04-01  发布在  其他
关注(0)|答案(4)|浏览(133)

我想创建多个按钮ROYGBV。我想使用JS属性的功能,当我点击一个按钮,背景颜色的变化。我只是一个似乎太长了。可以一些帮助吗?

function myFunctionRed(){document.body.style.backgroundColor="red";}
function myFunctionOrange(){document.body.style.backgroundColor="orange";}
function myFunctionYellow(){document.body.style.backgroundColor="yellow";}
function myFunctionGreen(){document.body.style.backgroundColor="limegreen";}
function myFunctionBlue(){document.body.style.backgroundColor="blue";}
function myFunctionIndigo(){document.body.style.backgroundColor="#4B0082";}
function myFunctionViolet(){document.body.style.backgroundColor="violet";}
ql3eal8s

ql3eal8s1#

您可以简化它,以便只使用一个接受颜色参数的函数,如:

function setBodyBgColor(color) { document.body.style.backgroundColor = color; }

并使用如下:

setBodyBgColor("red");
// or
setBodyBgColor("hsla(180, 80%, 80%, 0.8)")

你可以让它更灵活,也可以传递你想要样式化的元素:

function setBgColor (elem, color) { elem.style.background = color; }

setBgColor(document.body, "blue");

但是,它并没有很大的用处,它所做的一切就是改变背景颜色。相反,创建一个函数,可以应用任何样式,以及更多的CSS属性一次:

const css = (el, styles) => typeof styles === "object" ? Object.assign(el.style, styles) : el.style.cssText = styles;

// Use like:

css(document.body, {
  color: "red",
  background: "blue",
  fontSize: "2rem"
});

// Or like:

css(document.querySelector("#someElement"), `
  color: red;
  background: blue;
  font-size: 2rem;
`)
roqulrg3

roqulrg32#

function myColor(color,element) {
  let el = document.querySelector(element);
  element.style.backgroundColor = color;
} 

//use in html 
<button onclick="myColor('red','body')">R</button>
<button onclick="myColor('green','body')">G</button>
daolsyd0

daolsyd03#

这是我的建议
它比传递一个颜色给一个函数要长,但它向你展示了一些有趣的学习方法

const colors = {
  "red": "red",
  "orange": "orange",
  "yellow": "yellow",
  "limegreen": "limegreen",
  "blue": "blue",
  "hex": "#4B0082",
  "violet": "violet"
};
const colorKeys = Object.keys(colors);
const colorEntries = Object.entries(colors);

const createStyleSheet = () => {
  let head = document.querySelector('head'),
    style = document.createElement('style'),
    css = colorEntries
    .map(([name, color]) => `.${name}-bc { background-color: ${color}}`)
    .join('\n');
  css += '.colorButton { text-transform: capitalize;}'; // Uppercase first letter of button text
  style.type = 'text/css';
  style.appendChild(document.createTextNode(css))
  head.appendChild(style);
};
window.addEventListener('DOMContentLoaded', () => {
  createStyleSheet();
  const bodyCL = document.body.classList;
  const colorDiv = document.getElementById('colorDiv');

  colorDiv.innerHTML = colorEntries
    .map(([name, color]) => `<button class="colorButton ${name}-bc" value="${name}">${color}</button>`).join('');
  colorDiv.addEventListener('click', (e) => {
    const tgt = e.target;
    if (!tgt.matches('.colorButton')) return; // not a button
    colorKeys.forEach(color => bodyCL.remove(`${color}-bc`)); // remove previous
    bodyCL.add(`${tgt.value}-bc`);
  });
})
<div id="colorDiv"></div>
eagi6jfj

eagi6jfj4#

你可以简化函数如下:

function setBackgroundColor(color){
  document.body.style.backgroundColor = color;
}

相关问题