我正在为神奇宝贝渲染数据卡。每种神奇宝贝类型都有相关的颜色。火是红色,水是蓝色,草是绿色。有些宠物小精灵有一种,有些宠物小精灵有两种。

如果口袋妖怪有一种类型,我希望背景颜色是纯色,但是棘手的部分是,如果口袋妖怪有两种类型,我希望背景颜色是渐变。例如,火精灵宝可梦将具有稳定的红色背景,而水/草宝可梦将是蓝色/绿色渐变。

宠物小精灵有18种类型。总计324个组合。我知道我可以为每种组合.fire-ice {colors}硬编码类,但是必须有更好的解决方案。

如何以编程方式实现这一目标?我正在使用Sass并做出反应

最佳答案

1-设置一个对象以映射power:color

2-将神奇宝贝能力阵列转换为颜色阵列并将其连接到字符串

3-将颜色字符串放入background:linear-gradient(...)内联样式中

看下面的代码:



 const colors = {
  grass: 'green',
  fire: 'red',
  water: 'blue'
 }
 function getColor(powers){
  if(powers.length === 1) return colors[powers[0]];
  return 'linear-gradient('+powers.map(p=> colors[p]).join()+')';
 }

 // testing..
 const powers = [
  ['grass'],
  ['fire','water'],
  ['fire'],
  ['fire','water','grass']
 ];
 powers.forEach(p => console.log(getColor(p)));





要进行反应,请使用<div style={{background: getColor(this.props.powers)}}/>

10-04 18:21