###質問したいこと:background-colorの値をJavaScriptで設定するとき、element.setAttributeが使えない理由
JavaScriptでボタンを押すと、CSSのbackground-colorのパラメーターrgba()を設定する機能を実装しようとしています。
下記のアクション学習の課題をする中で実装を行いました。
JavaScript|MDN|イメージギャラリー
https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/Image_gallery
HTML
1 <div class="full-img"> 2 <img class="displayed-img" src="images/pic1.jpg"> 3 <div class="overlay"></div> 4 <button class="dark">Darken</button> 5 </div>
CSS
1.overlay { 2 position: absolute; 3 top: 0; 4 left: 0; 5 width: 640px; 6 height: 480px; 7 background-color: rgba(0,0,0,0); 8}
JavaScriptの該当部分は下記です。
JavaScript
1const overlay = document.querySelector('.overlay'); 2 3btn.onclick = function(e){ 4 if(e.target.textContent === "Darken"){ 5 e.target.setAttribute("class","light"); 6 e.target.textContent = "Lighten"; 7 //ここでbackgroundColorの値を設定 8 overlay.style.backgroundColor = "rgba(0,0,0,0.5)"; 9 //以下の3つの書き方ではいずれも作動しない 10 //overlay.style.opacity = 0.5; 11 //overlay.fillStyle = rgba(0,0,0,0.5); 12 //overlay.style.setAttribute("background-color","rgba(0,0,0,5)");
JavaScriptの全文も記載します。
JavaScript
1const displayedImage = document.querySelector('.displayed-img'); 2const thumbBar = document.querySelector('.thumb-bar'); 3 4const btn = document.querySelector('button'); 5const overlay = document.querySelector('.overlay'); 6 7/* Looping through images */ 8 9createImages(); 10function createImages(){ 11 for(let i = 1; i<6; i++){ 12 let newImage = document.createElement('img'); 13 newImage.setAttribute('src',"images/pic" + i + ".jpg "); 14 newImage.setAttribute("id","image" + i); 15 thumbBar.appendChild(newImage); 16 } 17} 18 19changeMainPic(); 20function changeMainPic(){ 21 for(let i=1; i<6; i++){ 22 let imgBtn = document.getElementById("image" + i); 23 console.log(imgBtn); 24 imgBtn.addEventListener("click",function(){ 25 displayedImage.setAttribute("src", "images/pic" + i + ".jpg") 26 }); 27 } 28} 29 30/* Wiring up the Darken/Lighten button */ 31//無名関数の利用 32btn.onclick = function(e){ 33 if(e.target.textContent === "Darken"){ 34 e.target.setAttribute("class","light"); 35 e.target.textContent = "Lighten"; 36 overlay.style.backgroundColor = "rgba(0,0,0,0.5)"; 37 //overlay.style.opacity = 0.5; 38 //overlay.fillStyle = rgba(0,0,0,0.5); 39 //overlay.style.setAttribute("background-color","rgba(0,0,0,5)"); 40 } 41 else{ 42 e.target.setAttribute("class","dark"); 43 e.target.textContent = "Darken"; 44 overlay.style.backgroundColor = "rgba(0,0,0,0)"; 45 //overlay.style.opacity = 0; 46 //overlay.fillStyle = rgba(0,0,0,0); 47 //overlay.style.setAttribute("background-color","rgba(0,0,0,0)"); 48 } 49} 50
上記のJavaScript側の最後の3行の書き方ではいずれもrgba()の値を設定することが出来ません。
特になぜsetAttributeのブラウザ組み込み関数が使えないのは、既にCSSのファイルでrgba()の値が設定されているからかな、、、?
とも思うのですが。
初心者質問で申し訳ありませんが、ご教示どなたかお願いします!
###補足
Mac OS Catalina
Browser Chrome
回答1件
あなたの回答
tips
プレビュー