ユーザーがさまざまな色を下にスクロールしてクリックすると色コードを取得できるさまざまなWebサイトで見られるように、カラーピッカーを作成する方法は?
行と列を作ってみましたが、あまり快適ではなかったのでカラーピッカーにしたい
あなたは私がそれをどのようにしようとしているのかをカラーボックスで見ることができます:
別の質問をしましたが、この問題を解決できません。
<input>
を使用して、タイプを色として指定するだけで、カラーピッカーを作成できます。ただし、最新のブラウザでのみ機能します。
<input name="Color Picker" type="color"/>
前の回答で述べたように、ネイティブHTMLカラーピッカー要素を使用できます。
<input type="color" />
ネイティブカラーピッカーが基準を満たしていない場合は、外観が古く、最新のカラーピッカーほど滑らかではないため、文字通り何百ものカラーピッカーをWeb上で使用できます。 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] + ")");
}
}
タイプを色として指定するだけで、カラーピッカーを作成できます。ただし、最新のブラウザでのみ機能します。
カラーピッカーを使用しないでください。それは何をするかに関しては超ランダムであり、古いブラウザはそれを通常の入力に変え、新しいものはそれがランダムになるとランダムになります。あなたの最善の策は、私と同じようにして、Javascriptカラーピッカーを選択するか、独自のカラーピッカーを作成することです。現在のピッカーはすべてプロジェクト固有なので、自分で作成する必要があります。
Gil Epshtain の回答に加えて、画像をロードしたくない場合は、キャンバスをグラデーションで塗りつぶすことができます
function 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>