|
113 | 113 |
|
114 | 114 | function createColor() { |
115 | 115 | const currentColor = colorPicker.value; |
116 | | - const currentOpacity = opacityPicker.value * 1; |
| 116 | + const currentOpacity = Number(opacityPicker.value); |
117 | 117 | setBackgroundColor(currentColor, currentOpacity); |
118 | 118 | createHEX(currentColor, currentOpacity); |
119 | 119 | createRGB(currentColor, currentOpacity); |
|
146 | 146 |
|
147 | 147 | function createHSL(r, g, b, opacity) { |
148 | 148 | const cell = document.querySelector("#HSL td"); |
149 | | - (r = r / 255), (g = g / 255), (b = b / 255); |
| 149 | + // Let's have r, g, b in the range [0, 1] |
| 150 | + r = r / 255; |
| 151 | + g = g / 255; |
| 152 | + b = b / 255; |
150 | 153 | const cmin = Math.min(r, g, b); |
151 | 154 | const cmax = Math.max(r, g, b); |
152 | 155 | const delta = cmax - cmin; |
153 | 156 | let h = 0, |
154 | 157 | s = 0, |
155 | 158 | l = 0; |
156 | 159 |
|
157 | | - if (delta === 0) h = 0; |
158 | | - else if (cmax === r) h = ((g - b) / delta) % 6; |
159 | | - else if (cmax === g) h = (b - r) / delta + 2; |
| 160 | + if (delta === 0) { |
| 161 | + h = 0; |
| 162 | + } else if (cmax === r) { |
| 163 | + h = ((g - b) / delta) % 6; |
| 164 | + } else if (cmax === g) { |
| 165 | + h = (b - r) / delta + 2; |
| 166 | + } |
160 | 167 | else h = (r - g) / delta + 4; |
161 | 168 |
|
162 | 169 | h = Math.round(h * 60); |
163 | 170 |
|
164 | | - if (h < 0) h += 360; |
| 171 | + // We want an angle between 0 and 360° |
| 172 | + if (h < 0) { |
| 173 | + h += 360; |
| 174 | + } |
165 | 175 |
|
166 | 176 | l = (cmax + cmin) / 2; |
167 | 177 | s = (delta === 0) ? 0 : delta / (1 - Math.abs(2 * l - 1)); |
168 | | - s = +(s * 100).toFixed(1); |
169 | | - l = +(l * 100).toFixed(1); |
| 178 | + s = Number((s * 100).toFixed(1)); |
| 179 | + l = Number((l * 100).toFixed(1)); |
170 | 180 |
|
171 | 181 | if (opacity === 1) { |
172 | 182 | cell.textContent = `hsl(${h} ${s}% ${l}%)`; |
|
0 commit comments