2013-12-10 168 views
1

在我的基本画布绘画工具中,我希望用户能够使用颜色选择器更改笔画的颜色。所以我想ctx.strokeStyle改变为用户在颜色选择器上选择的颜色。我已经设法通过使用input type="color"将颜色选择器添加到画布上,但是我想知道如何根据颜色选择器中拾取的颜色来改变画布中笔划/笔刷的颜色。如何将颜色选择器用于画布笔触颜色?

所以这是我此刻的画布:

enter image description here

而且我希望用户使用此选项可以更改笔触颜色:

enter image description here

+0

为什么你不能在'onchange'上得到它的价值? [Here](http://jsfiddle.net/Riesling/PEGS4/)是jsfiddle上的一个例子,我发现[here](http://stackoverflow.com/questions/13805611/event-handler-for-a-html5 -color输入元件)。顺便说一句,目前有一些浏览器不支持'type = color'。对于列表检查这个[链接](http://html5test.com/compare/feature/form-color-element.html) – wendelbsilva

+1

+由于在浏览器中打开标签“如何问”) – brasofilo

+0

@ wendelbsilva谢谢,我会尝试在那... ... – user3088233

回答

2

根据您发布的图片,看起来你想要一个像坊间的解决方案张贴在他的回答。尽管在文中您提到了type="color"。如果你想使用这个输入,你可以检查这个jsfiddle工作。在这第二种情况下,只记得很多浏览器还不支持它。如果您想查看支持它的浏览器列表,请点击here

下面我会试着详细说明我对你的jsfiddle做了哪些改变。

首先,您需要设置回调为颜色input。这意味着当输入值改变时,它调用方法change。该功能change越来越输入的value和一个名为color全局变量设置。

var color = "rgb(255,0,0)"; 
function change(e){ 
    color = this.value; 
} 
document.getElementById("color").onchange = change; 

另一个更改是在draw函数中。在绘制之前,它将获取变量color中的值。这样,下次更改颜色时,它将更新笔画中使用的颜色。

ctx.strokeStyle = color; 

这些变化,如果将来您决定使用另一种工具来获取颜色(例如,您可以检查browser,看它是否支持input="color"在这种情况下使用不同的颜色选择器),您只需在变量color中设置新颜色即可。

1

下面是一个简单的例子上用于设置当前颜色的“工具”画布颜色选择器上画布(填充/冲程):

Javascript paint Canvas, need help re-locating buttons?

对于“色轮”选取器,您可以在工具画布上绘制轮子,然后使用context.getImageData获取鼠标光标下的像素颜色数据。

var imgData=ctx.getImageData(mouseX,mouseY,1,1); 

var data=imgData.data; 

return("rgba("+data[0]+","+data[1]+","+data[2]+","+data[3]+")"); 

用户挑选他们的工具画布颜色后,您可以使用context.strokeStyle和context.fillStyle使这些颜色画布上的活动。

+0

这里是我的代码 - http://jsfiddle.net/KQHMA/2/你会介意只是编辑,以便中风的颜色根据颜色选择器改变?我非常感谢!谢谢 – user3088233

+0

+1此解决方案与问题 – wendelbsilva

+0

@Loktar中显示的图片中的颜色选择器类似,请告诉我,它与此[图片]完全不同(http://i.stack.imgur.com/ewu2p。 png)他提出了?现在我很感兴趣。 – wendelbsilva

0

您只需要获取颜色输入的值并将其设置为strokeStyle即可。

Live Demo

var points=new Array(), 
    colorInput = document.getElementById("color"); 

     function start(e){ 
      var mouseX = e.pageX - canvas.offsetLeft; 
      var mouseY = e.pageY - canvas.offsetTop; 
      paint = true; 
      ctx.beginPath(); 
      ctx.moveTo(mouseX,mouseY); 
      points[points.length]=[mouseX,mouseY]; 
     }; 

     function draw(e){ 

      if(paint){ 
      var mouseX = e.pageX - canvas.offsetLeft; 
      var mouseY = e.pageY - canvas.offsetTop; 
      ctx.lineTo(mouseX,mouseY); 
      ctx.stroke(); 

      // set the value to the color input 
      ctx.strokeStyle = colorInput.value; 

      ctx.lineJoin = ctx.lineCap = 'round'; 

      points[points.length]=[mouseX,mouseY]; 
      } 

     } 
     function stop(e){ 
      paint=false; 
     var s=JSON.stringify(points); 
      localStorage['lines']=s; 
     } 



     var paint=false; 
     var canvas = document.getElementById('myCanvas'); 
     var ctx=canvas.getContext("2d"); 
     canvas.addEventListener('mousedown',start); 
     canvas.addEventListener('mousemove',draw); 
     canvas.addEventListener('mouseup',stop); 
+0

@markE啊废话对不起我没有注意用户名...我希望我不会在这样的急速下降:(因为答案我不能删除它我发誓他原来的问题没有显示这样的自定义颜色选择器无论如何,我提出了另一个你的答案:P – Loktar

+0

我想他的图像总是看起来像这样,它只是一个原来的链接,我跳过它,只是看着小提琴。 – Loktar

+1

所有的好...顺便说一句,我喜欢你的工作。 – markE