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

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

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

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

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

Q&A

解決済

1回答

282閲覧

Font Awesomeのiconをクリックして5パターンのアイコンに変化させたい。

takusabuwp

総合スコア13

JavaScript

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

font

近年は、コンピュータ上、紙面上で利用できる書体データのことをfontといいます。数える時の単位は「書体」で、データとしてのフォントは、デジタルフォントと呼ばれる場合があります。 HTML/CSSでは要素を指定し、フォント情報を調整することができます。

0グッド

0クリップ

投稿2020/05/18 13:01

編集2020/05/18 16:05

前提・実現したいこと

font awesomeを使ってアイコンを使っています。クリックしたらアイコンが5パターン変更するようにしたいです。

該当のソースコード

JavaScript

HTML

<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <!-- Font Awesome https://fontawesome.com/start --> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous"> <!-- Bootstrap https://getbootstrap.com/docs/4.3/getting-started/introduction/ --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <title>todolist</title> <link rel="stylesheet" href="style.css" /> </head> <body> <div class="container"> <header class="text-center text-light my-4"> <h1 class="mb-4">Todo List</h1> <form class="search"> <input type="text" class="form-control m-auto" name="search" placeholder="Search KeyWard"> </form> </header> <ul class="list-group todos mx-auto text-light"> </ul> <form class="add text-center my-4"> <label class="text-light">ADDING TASK</label> <input type="text" class="form-control m-auto" name="add" placeholder="New Text"> </form> </div> <script src="script.js"></script> </body> </html>

script

const addTask = document.querySelector('.add');
const list = document.querySelector('.todos');

const createTodoList = task => {
// HTML テンプレートを生成
const html = <li class="list-group-item"> <span>${task}</span> <i class="far fa-trash-alt delete fa-pull-right "></i> <i class="fas fa-battery-empty "></i> </li> ;

list.innerHTML += html;

}

addTask.addEventListener('submit', e => {
// デフォルトのイベントを無効
e.preventDefault();

// タスクに入力した値を空白を除外して格納 const task = addTask.add.value.trim(); if(task.length) { // Todo List の HTML を作成 createTodoList(task); // タスクに入力した文字をクリア addTask.reset(); }

});
//2パターンのアイコンの切り替え可能。5パターンを作りたい。
list.addEventListener('click', e => {

if(e.target.classList.contains('fa-battery-empty')){
e.target.classList.replace('fa-battery-empty','fa-battery-quarter');
}else{
e.target.classList.replace('fa-battery-quarter','fa-battery-empty');
}
});

//削除機能
list.addEventListener('click', e => {
if(e.target.classList.contains('delete')){
e.target.parentElement.remove();
}
});

試したこと

2パターンのアイコンの切り替え可能。
list.addEventListener('click', e => {
if(e.target.classList.contains('fa-battery-empty')){
e.target.classList.replace('fa-battery-empty','fa-battery-quarter');
}else{
e.target.classList.replace('fa-battery-quarter','fa-battery-empty');
}
});

5パターンを作りたい。

2パターンのアイコンは、どっちかに切り替えれるということで今のコードで解決できるのですが、5パターンになるとarraysを使って複数分岐(if)を使って
やらんといかんとなるとこんがらがってしまって、
手詰まりになった次第です。

こちらのソースコードを参考。
https://teratail.com/questions/222969

2パターンしか出来ず、、、

補足情報(FW/ツールのバージョンなど)

全体のソースコードの参考サイト
https://qiita.com/__init__/items/d1c59c87808fc180c871

使用したいアイコン5種類

https://webllica.com/search-font-awesome-icon-by-japanese/

fa-battery-empty fas \f244 バッテリー 電池

fa-battery-full fas \f240 バッテリー 電池
fa-battery-half fas \f242 バッテリー 電池
fa-battery-quarter fas \f243 バッテリー 電池
fa-battery-three-quarters fas \f241 バッテリー 電池

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

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

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

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

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

kei344

2020/05/18 15:08

(質問文は編集できます)質問文のHTML/JavaScriptはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。 また、ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
takusabuwp

2020/05/18 15:32

失礼しました。 コードブロックと バックオートを理解して意識して編集したいと思います。 太文字の部分が問題のところなんですが、 綺麗に整形しようとすると太文字が解除されるようで 問題の部分が目立たなくなりそうなので、そのままにしてしまいました。 2パターンのアイコンは、どっちかに切り替えれるということで今のコードで解決できるのですが、5パターンになるとarraysを使って複数分岐(if)を使って やらんといかんとなるとこんがらがってしまって、 手詰まりになった次第です。
kei344

2020/05/18 15:36

ここは「質問への追記・修正の依頼」ですので、「回答」ではありません。質問本文は編集することが可能なので、その依頼をしています。
takusabuwp

2020/05/19 10:24

何度も失礼しました。 以後気を付けます<(_ _)>
kei344

2020/05/19 10:49

(再掲)質問本文は編集することが可能なので、その依頼をしています。
kei344

2020/05/19 10:50

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
takusabuwp

2020/05/19 13:31

まだ理解してない部分が あり、まだまだ、編集不足を感じています。 またつっこみどころがあったら、フォローお願いします。 受付中よろしくないですね。 了解です。
guest

回答1

0

ベストアンサー

アイコンは順番にループする前提です。

JavaScript

1const iconList = [ 2 'fa-battery-empty', 3 'fa-battery-full', 4 'fa-battery-half', 5 'fa-battery-quarter', 6 'fa-battery-three-quarters', 7]; 8 9list.addEventListener('click', e => { 10 const nowIndex = iconList.findIndex(icon => e.target.classList.contains(icon)); 11 const nextIndex = (nowIndex + 1) % iconList.length; 12 e.target.classList.replace(iconList[nowIndex], iconList[nextIndex]); 13});

投稿2020/05/18 17:33

編集2020/05/18 17:36
satokei

総合スコア1217

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

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

takusabuwp

2020/05/19 10:29

分かりやすいソースコードありがとうございます。 思い通りの動きができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問