如前面的回答所提到的,您可以使用原生 HTML 颜色选择器元素:
<input type="color" />
更多信息请参见:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/color
如果原生的颜色选择器不符合您的要求,因为它看起来过时,而且不像现代的颜色选择器那样流畅,您可以使用网络上数百个颜色选择器中的任何一个。即使在NPM软件包页面上进行简单搜索也会返回几百个结果供您选择。
https://www.npmjs.com/search?q=color%20picker
如果您和我一样,在长时间搜索颜色选择器库后,没有找到符合您要求的选择器,您可以构建自己的颜色选择器,这并不需要太长时间,我将演示如何实现。
<canvas id="colorCanvas" class="color-canvas" width="250" height="250"></canvas>
给画布元素添加 border-radius: 50%
,这将使画布变成圆形,因此只有在圆内的点击事件才会被触发,而边缘的点击事件将被忽略(我们将在下一步需要点击事件)。
在您的 JavaScript 中,使用您的颜色选择器图像初始化画布,并监听点击事件。
function initColorPicker()
{
var canvasEl = document.getElementById('colorCanvas');
var canvasContext = canvasEl.getContext('2d');
var image = new Image(250, 250);
image.onload = () => canvasContext.drawImage(image, 0, 0, image.width, image.height);
image.src = "./images/myColorPickerImage.png";
canvasEl.onclick = function(mouseEvent)
{
var imgData = canvasContext.getImageData(mouseEvent.offsetX, mouseEvent.offsetY, 1, 1);
var rgba = imgData.data;
alert("rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ", " + rgba[3] + ")");
}
}
value
属性来设置/获取所选的颜色。 - Gil Epshtain您可以通过使用类型为“color”的<input>
来创建一个简单的颜色选择器。但这仅适用于现代浏览器。
<input name="Color Picker" type="color"/>
<input type="color">
非常单调和令人讨厌..) - Momorofunction initColorPicker() {
var canvas = document.getElementById('colorCanvas');
var canvasContext = canvas.getContext('2d');
let gradient = canvas.getContext('2d').createLinearGradient(0, 0, canvas.width, 0)
gradient.addColorStop(0, '#ff0000')
gradient.addColorStop(1 / 6, '#ffff00')
gradient.addColorStop((1 / 6) * 2, '#00ff00')
gradient.addColorStop((1 / 6) * 3, '#00ffff')
gradient.addColorStop((1 / 6) * 4, '#0000ff')
gradient.addColorStop((1 / 6) * 5, '#ff00ff')
gradient.addColorStop(1, '#ff0000')
canvas.getContext('2d').fillStyle = gradient
canvas.getContext('2d').fillRect(0, 0, canvas.width, canvas.height)
gradient = canvas.getContext('2d').createLinearGradient(0, 0, 0, canvas.height)
gradient.addColorStop(0, 'rgba(255, 255, 255, 1)')
gradient.addColorStop(0.5, 'rgba(255, 255, 255, 0)')
gradient.addColorStop(1, 'rgba(255, 255, 255, 0)')
canvas.getContext('2d').fillStyle = gradient
canvas.getContext('2d').fillRect(0, 0, canvas.width, canvas.height)
gradient = canvas.getContext('2d').createLinearGradient(0, 0, 0, canvas.height)
gradient.addColorStop(0, 'rgba(0, 0, 0, 0)')
gradient.addColorStop(0.5, 'rgba(0, 0, 0, 0)')
gradient.addColorStop(1, 'rgba(0, 0, 0, 1)')
canvas.getContext('2d').fillStyle = gradient
canvas.getContext('2d').fillRect(0, 0, canvas.width, canvas.height)
canvas.onclick = function(e) {
console.log()
var imgData = canvasContext.getImageData((e.offsetX / canvas.clientWidth) * canvas.width, (e.offsetY / canvas.clientHeight) * canvas.height, 1, 1)
var rgba = imgData.data;
var color = "rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ", " + rgba[3] + ")";
console.log("%c" + color, "color:" + color)
}
}
initColorPicker()
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
html {
height: 100%;
width: 100%;
}
body {
height: 100%;
width: 100%;
margin: 0;
}
canvas {
height: 100%;
width: 100%;
}
<html>
<body>
<canvas id="colorCanvas" class="color-canvas" width="100%" height="100%"></canvas>
</body>
</html>
请尝试以下方法:
<input name="clr" type="color">
你可以通过将类型设置为颜色来简单地创建一个颜色选择器。但它只在现代浏览器中有效。
不要使用颜色选择器。它的行为非常随机,旧版浏览器会将其转换为普通输入框,新版浏览器也是随机的。你最好的选择是像我一样选择一个JavaScript颜色选择器或者自己创建一个。我被迫创建自己的颜色选择器,因为所有当前的选择器都太针对特定项目了。
basically html has an many types for input like button and checkbox We can use the color type
<input id="idHere" type="color">
<button onclick="alert(document.getElementById('idHere').value)">color value</button>