首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个颜色选择器可用于多种颜色(背景、前景和文本)

一个颜色选择器可用于多种颜色(背景、前景和文本)
EN

Stack Overflow用户
提问于 2018-01-01 12:50:34
回答 2查看 413关注 0票数 0

我有一个可以正常工作的颜色选择器。

HTML:

代码语言:javascript
复制
<input id="cyan" class="colorPicker" style="vertical-align: middle;" class="grabbable" type="range" min="0" max="255" step="1" value="255">  
<input id="magenta" class="colorPicker" style="vertical-align: middle;" class="grabbable" type="range" min="0" max="255" step="1" value="255">  
<input id="yellow" class="colorPicker" style="vertical-align: middle;" class="grabbable" type="range" min="0" max="255" step="1" value="255">  

JavaScript:

代码语言:javascript
复制
var colorPicker = document.getElementsByClassName( "colorPicker" );
for( var i = 0; i < colorPicker.length; i++ )
{
  colorPicker[i].addEventListener( "input", function(){
    var cyan = document.getElementById( "cyan" ).value,
        magenta = document.getElementById( "magenta" ).value,
        yellow = document.getElementById( "yellow" ).value;

    document.body.style.backgroundColor = "rgb(" + cyan + ", " + magenta + ", " + yellow + ")";
    localStorage.setItem( "cyan", cyan );
    localStorage.setItem( "magenta", magenta );
    localStorage.setItem( "yellow", yellow );
  });
}

我希望能够使用屏幕上相同的一个颜色选择器,但有一个单选按钮或下拉选择其他颜色值来更改。

希望这一点是清楚的。我是JavaScript的新手,我知道它非常强大和灵活。我只是不知道如何实现这一点。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-01-01 13:07:44

你是说像这样的东西?我已经添加了HTML选择元素和附加的事件到它。

代码语言:javascript
复制
var colorPicker = document.getElementsByClassName( "colorPicker" );
for( var i = 0; i < colorPicker.length; i++ )
{
  colorPicker[i].addEventListener( "input", function(){
    var cyan = document.getElementById( "cyan" ).value,
        magenta = document.getElementById( "magenta" ).value,
        yellow = document.getElementById( "yellow" ).value;

    document.body.style.backgroundColor = "rgb(" + cyan + ", " + magenta + ", " + yellow + ")";
    localStorage.setItem( "cyan", cyan );
    localStorage.setItem( "magenta", magenta );
    localStorage.setItem( "yellow", yellow );
  });
}

var colorPickerSelect = document.getElementById("colorPickerSelect");
colorPickerSelect.addEventListener('change', function() {
	document.body.style.backgroundColor = colorPickerSelect.value;
})
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="cyan" class="colorPicker" style="vertical-align: middle;" class="grabbable" type="range" min="0" max="255" step="1" value="255">  
<input id="magenta" class="colorPicker" style="vertical-align: middle;" class="grabbable" type="range" min="0" max="255" step="1" value="255">  
<input id="yellow" class="colorPicker" style="vertical-align: middle;" class="grabbable" type="range" min="0" max="255" step="1" value="255">  
<br/>
<select id="colorPickerSelect">
  <option>red</option>
  <option>green</option>
  <option>blue</option>
</select>

票数 0
EN

Stack Overflow用户

发布于 2018-01-05 14:46:57

维平

非常感谢你的帖子。你让我思考然后我想通了。下面的解决方案运行良好。只需要再做几个小调整,就可以获得所需的确切行为。

HTML:

代码语言:javascript
复制
<input id="cyan" class="colorPicker" style="vertical-align: middle;" class="grabbable" type="range" min="0" max="255" step="1" value="255">
<input id="magenta" class="colorPicker" style="vertical-align: middle;" class="grabbable" type="range" min="0" max="255" step="1" value="255">
<input id="yellow" class="colorPicker" style="vertical-align: middle;" class="grabbable" type="range" min="0" max="255" step="1" value="255">

<select id="colorPickerSelect" style="cursor: pointer;" onchange="colorPickerSelect( this.value );">
  <option value=""></option>
  <option value="background">Background</option>
  <option value="titleBackground">Title BG</option>
  <option value="titleText">Title Text</option>
  <option value="border">Border</option>
</select>

JavaScript:

代码语言:javascript
复制
function assignColorPicker( )
{
  var type = document.getElementById( "colorPickerSelect" ).value;
  var cyan = document.getElementById( "cyan" ).value,
      magenta = document.getElementById( "magenta" ).value,
      yellow = document.getElementById( "yellow" ).value;
  if( type == 'background' )
  {
    document.body.style.backgroundColor = "rgb(" + cyan + ", " + magenta + ", " + yellow + ")";
  }
  else if( type == 'titleBackground' )
  {
    document.styleSheets[3].cssRules[1].style.backgroundColor = "rgb(" + cyan + ", " + magenta + ", " + yellow + ")";
  }
    else if( type == 'titleText' )
  {
    document.styleSheets[3].cssRules[4].style.color = "rgb(" + cyan + ", " + magenta + ", " + yellow + ")";
  }
  else if( type == 'border' )
  {
    document.styleSheets[3].cssRules[0].style.border = '1px solid ' + "rgb(" + cyan + ", " + magenta + ", " + yellow + ")";
    document.styleSheets[3].cssRules[2].style.color = "rgb(" + cyan + ", " + magenta + ", " + yellow + ")";
  }
}

function colorPickerSelect( )
{
  var colorPicker = document.getElementsByClassName( "colorPicker" );
  for( var i = 0; i < colorPicker.length; i++ )
  {
    colorPicker[i].removeEventListener( "input", assignColorPicker );
    colorPicker[i].addEventListener( "input", assignColorPicker );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48047220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档