■やりたいこと
chroma.jsを使ってランダムに色を取得し、気になった色が合ったらロックし、
ランダムに色を取得するためアイコンの色は背景が暗かったら白、明るかったら黒に変えるようにする。
■問題点
問題なく作動しているのですが、何故か色をロックした状態でランダムに色を取得するとタイトルのエラーが出ます。
html
1<div class="colors"> 2 <div class="color"> 3 <h2>Hex</h2> 4 <div class="controls"> 5 <button class="lock"><i class="fas fa-lock-open"></i></button> 6 </div> 7 </div> 8</div>
js
1const colorDivs = document.querySelectorAll(".color"); 2 3lockButton.forEach((button, index) => { 4 button.addEventListener("click", (e) => { 5 lockLayer(e, index); 6 }); 7}); 8 9function lockLayer(e, index) { 10 const lockSVG = e.target.children[0]; 11 const activeBg = colorDivs[index]; 12 activeBg.classList.toggle("locked"); 13 14 if (lockSVG.classList.contains("fa-lock-open")) { 15 e.target.innerHTML = '<i class="fas fa-lock"></i>'; 16 } else { 17 e.target.innerHTML = '<i class="fas fa-lock-open"></i>'; 18 } 19} 20 21function randomColors() { 22 // 23 initialColors = []; 24 colorDivs.forEach((div, index) => { 25 const hexText = div.children[0]; 26 const randomColor = generateHex(); 27 // Add it to the array 28 if (div.classList.contains("locked")) { 29 initialColors.push(hexText); 30 return; 31 } else { 32 initialColors.push(chroma(randomColor).hex()); 33 } 34 35 // 背景の色を変える 36 div.style.backgroundColor = randomColor; 37 hexText.innerText = randomColor; 38 39 // 明暗によってテキストの色を変える 40 checkTextContrast(randomColor, hexText); 41 }); 42 // Reset Inputs 43 resetInputs(); 44 // Check For Button Contrast 45 lockButton.forEach((button, index) => { 46 checkTextContrast(initialColors[index], button); 47 checkTextContrast(initialColors[index], button); 48 }); 49} 50 51function checkTextContrast(color, text) { 52 const luminance = chroma(color).luminance(); 53 if (luminance > 0.5) { 54 text.style.color = "black"; 55 } else { 56 text.style.color = "white"; 57 } 58}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/06 02:07