質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

985閲覧

background-colorのパラメーター設定の方法[JavaScript/CSS]

digitalhimiko

総合スコア142

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2019/11/24 14:09

編集2019/11/24 15:28

###質問したいこと: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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/11/24 14:14

変数overlayが定義されていないので、その定義部分を含めたコード全体を質問文に追記してください。
digitalhimiko

2019/11/24 14:55

追記いたしました! document.querySelector(".overlay");で宣言、初期化してます!
digitalhimiko

2019/11/24 15:28

.jsファイルの全文も記載しました!
guest

回答1

0

ベストアンサー

動くサンプル:https://jsfiddle.net/pbc5wa7z/

JavaScript自体には問題は無く、.overlaybuttonの上に被せてしまっているためにクリックできない状態になっているようです。
rgba(0,0,0,0)でなく、不透明にして確認してみてください。

投稿2019/11/24 15:39

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

digitalhimiko

2019/11/25 12:00

ありがとうございます!試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問