|
|

楼主 |
发表于 2022-10-1 07:57
|
显示全部楼层
原创代码分享(细节可能需要完善)- <style>
- #papa { margin: 50px auto;width: fit-content; display: flex;flex-direction: row; gap: 20px; border-radius: 4px; background: #eee; box-shadow: 1px 1px 2px gray; padding: 20px; position: relative; }
- #hslSet { padding: 12px; width: 260px; }
- #result { padding: 12px; }
- #colorPan { margin: auto; width: 160px; height: 160px; border-radius: 50%; cursor: pointer; }
- #colorResult { width: 300px; height: 200px; }
- #hslColor, #rgbColor, #btnCopy { margin: 10px; }
- #hslColor::before, #rgbColor::before { content: '复制:'; cursor: pointer; }
- #papa p { margin: 0 8px; padding: 6px 0; }
- #papa input[type=range] { cursor: pointer; }
- </style>
- <div id="papa">
- <fieldset id="hslSet">
- <legend> hsl颜色配置 </legend>
- <div id="colorPan"></div>
- <p><br><label for="H">色 相(H)</label><input id="H" type="range" max="360" min="0" value="0" step="1" /> <span id="sH">0</span></p>
- <p><label for="S">饱和度(G)</label><input id="S" type="range" max="100" min="0" value="100" step="1" /> <span id="sS">100</span></p>
- <p><label for="L">亮 度(B)</label><input id="L" type="range" max="100" min="0" value="50" step="1" /> <span id="sL">50</span></p>
- </fieldset>
- <fieldset id="result">
- <legend> 配置效果:</legend>
- <div id="colorResult"></div>
- <div id="hslColor">hsl 尚未配置</div>
- <div id="rgbColor">rgb ...</div>
- </fieldset>
- </div>
- <script>
- let rangeAr = document.getElementById('hslSet').getElementsByTagName('input'), hslAr = [0,100,50], bgStr = 'conic-gradient(at center center';
- for(j = 0; j < 360; j++) {
- bgStr += ',hsl(' +j + ', 100%, 50%)';
- }
- bgStr += ')';
- colorPan.style.background = bgStr;
- hslColor.onclick = () => navigator.clipboard.writeText(hslColor.innerText);
- rgbColor.onclick = () => navigator.clipboard.writeText(rgbColor.innerText);
- colorPan.onclick = (e) => {
- let r = colorPan.offsetWidth / 2;
- let angle = Math.atan2(e.offsetY - r, e.offsetX - r) * 180 / Math.PI;
- angle += (e.offsetX < r && e.offsetY < r) ? 450 : 90;
- hslAr[0] = rangeAr[0].value = angle.toFixed(2);
- setColor(rangeAr[0]);
- }
- Array.from(rangeAr).forEach((item) => { item.onchange = () => setColor(item); });
- let setColor = (ele) => {
- ele.id === 'H' ? hslAr[0] = sH.innerText = ele.value : (ele.id=== 'S' ? hslAr[1] = sS.innerText = ele.value : hslAr[2] = sL.innerText = ele.value);
- colorResult.style.background = hslColor.innerText = 'hsl(' + hslAr[0] +', ' + hslAr[1] + '%, ' + hslAr[2] + '%)';
- rgbColor.innerText = colorResult.style.background;
- }
- </script>
复制代码
|
|