问题描述
我一直在尝试为我的绘图应用程序创建一个颜色选择器,用于更改 paper.js 中的画笔颜色,但我有点迷茫。我使用了一个脚本从 paper.js 库示例中创建了 3 个 HSL 轮子,并通过单击左上角的圆圈来激活它们。到目前为止它看起来像这样:HSLwheels。 有谁知道如何从这些轮子中读取颜色值,或以任何其他方式使用 paperscript 创建颜色选择器?
var viewColorWheel = 'true';
function showWheel() {
var steps = {
hue: 100,saturation: 20,lightness: 3
};
for (var i = 0; i < steps.lightness; i++) {
var radius = view.size.width / steps.lightness * 0.45;
var offset = new Point(view.size.width / steps.lightness,0);
var position = view.bounds.leftCenter + offset * (i + 0.5);
var lightness = 1 - (i + 1) / (steps.lightness + 1);
createWheel(position,radius,steps,lightness);
};
}
function createWheel(center,lightness) {
var hUnit = 360 / steps.hue;
for (var h = 0; h < steps.hue; h++) {
var hue = h * hUnit;
var vector = new Point({
angle: hue - 90,length: radius
});
pathC = new Path(new Point(),vector.rotate(hUnit / 2));
pathC.closed = true;
pathC.arcTo(vector,vector.rotate(hUnit / -2));
pathC.position += center;
var colors = [];
for (var i = 0; i < steps.saturation; i++) {
var saturation = i / steps.saturation;
var color = { hue: hue,saturation: saturation,lightness: lightness };
colors.push(color);
}
var gradient = new Gradient(colors,true);
var from = center;
var to = center + vector;
var gradientColor = new Color(gradient,from,to);
pathC.fillColor = pathC.strokeColor = gradientColor;
}
}
var strokeColorButton = new Path.Circle({
center: [40,80],radius: 15,fillColor: strokeColor
});
strokeColorButton.onClick = function(event) {
//strokeColorButton.radius = 40;
console.log(viewColorWheel);
if (viewColorWheel == 'true') {
console.log(viewColorWheel);
showWheel();
viewColorWheel = 'false';
//colorWheelLayer.activate()
} else {
viewColorWheel = 'true';
}
}
解决方法
我是 paper.js 的新手,正在通过 StackOverflow 和教程学习。我正在挣扎,而不是在发展。 :D 我创建了一个简单的颜色选择器工具。我不确定这是否是您正在寻找的内容,希望它会有所帮助。
`
var paintColor = "red";
const changeColor = (color) => {
paintColor = color;
}
paper.install(window);
window.onload = function () {
paper.setup('drawCanvas');
var tool = new Tool();
var path;
tool.onMouseDown = function (event,strokeColor = paintColor) {
path = new Path({
center: event.path,strokeColor: strokeColor,strokeSize: 2
});
// path.add(event.point);
}
tool.onMouseDrag = function (event) {
path.add(event.point);
}
}
function clearCanvas() {
paper.project.activeLayer.removeChildren();
paper.view.draw();
}
html,body{
height: 100%;
}
body{
font: 20px sans-serif;
overflow: hidden;
text-align: center;
display: flex;
justify-content: center;
/* flex-direction: column; */
}
canvas [resize]{
flex: 1;
border: 4px solid rgb(75,75,75);
width: 100%;
}
.tools {
width:200px;
height:50px;
top:1%;
left: 40%;
position: fixed;
align-items:center;
background:#ddd;
padding:10px 10px;
text-align: center;
border-radius: 10px;
display: flex;
justify-content: center;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Color Picker with PaperJs</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.12.15/paper-full.min.js"></script>
</head>
<body>
<div class="tools">
<div class="color">
<label for="pen-color">Color</label>
<input type="color" id="pen-color" value="#000" onclick="changeColor(this.value);">
</div>
<div class="clear">
<label>Clear Canvas</label>
<button onclick="clearCanvas()">
Clear
</button>
</div>
</div>
<canvas id="drawCanvas" resize></canvas>
</body>
</html>
`