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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

Q&A

解決済

1回答

1637閲覧

checked判定で任意の値に進捗ゲージを動かしたい

kay1221

総合スコア1

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

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

0グッド

0クリップ

投稿2021/07/30 23:50

前提・実現したいこと

![ イメージ説明

はじめまして、JavaScript独学の初学者です。
今回自身のwordpressに「チェックボックスでプログレスバーを動かす」を実装していきたいと考えております。

https://kimmobrunfeldt.github.io/progressbar.js/
上記、progressbar.jsのライブラリを使用して、SemiCircleプログレスバーを実装しました。
その下に、チェックボックスを配置し、javascriptにてchecked判定でプログレスバーを進めたり戻したり。といったものは実装できました。

※実際のWordPress環境ではなく、VsCodeにて4つのファイルを作成し、サクッと実装確認ができればと思っています。

### 質問内容

チェック1、2、3と順番にチェックし、チェック3、2、1と順番にチェックを外せば、プログレスバーの値は0になるのですが、チェックボックスを規則性なく適当に押すと、バーが正しく動きません。
チェックボックスを押したら、任意の値でプログレスバーを動かすようにするにはどうすればよいでしょうか?

該当のソースコード

html

1<html> 2<head> 3 <link href="https://fonts.googleapis.com/css?family=Raleway:400,300,600,800,900" rel="stylesheet" type="text/css"> 4 <link href="./myprogress.css" rel="stylesheet" type="text/css"> 5 <script type="text/javascript" src="./progressbar.min.js"></script> 6</head> 7 <div id="container"></div> 8 <script type="text/javascript" src="./myprogress.js"></script> 9 10<input type="checkbox" id="check1" value="red" /> チェック1</input> 11<input type="checkbox" id="check2" value="red" /> チェック2</input> 12<input type="checkbox" id="check3" value="red" /> チェック3</input> 13 14<script> 15 const check1 = document.getElementById("check1"); 16 17 18 check1.addEventListener("click", function (e) { 19 if (check1.checked) { 20 bar.animate(0.33); 21 } else { 22 bar.animate(0); 23 } 24 }); 25 26 const check2 = document.getElementById("check2"); 27 28 check2.addEventListener("click", function (e) { 29 if (check2.checked) { 30 bar.animate(0.66); 31 } else { 32 bar.animate(0.33); 33 } 34 }); 35 36 const check3 = document.getElementById("check3"); 37 38 check3.addEventListener("click", function (e) { 39 if (check3.checked) { 40 bar.animate(1.0); 41 } else { 42 bar.animate(0.66); 43 } 44 }); 45</script> 46 47</body> 48</html> 49

js

1// progressbar.js@1.0.0 version is used 2// Docs: http://progressbarjs.readthedocs.org/en/1.0.0/ 3 4var bar = new ProgressBar.SemiCircle(container, { 5 strokeWidth: 6, 6 color: "#FFEA82", 7 trailColor: "#eee", 8 trailWidth: 1, 9 easing: "easeInOut", 10 duration: 1400, 11 svgStyle: null, 12 text: { 13 value: "", 14 alignToBottom: false, 15 }, 16 from: { color: "#FFEA82" }, 17 to: { color: "#ED6A5A" }, 18 // Set default step function for all animate calls 19 step: (state, bar) => { 20 bar.path.setAttribute("stroke", state.color); 21 var value = Math.round(bar.value() * 100); 22 if (value === 0) { 23 bar.setText(""); 24 } else { 25 bar.setText(value); 26 } 27 28 bar.text.style.color = state.color; 29 }, 30});

css

1#container { 2 margin: 20px; 3 width: 200px; 4 height: 100px; 5}

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

VSCODE:バージョン: 1.58.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

どれをクリックしたかでなくいくつチェックしているかに応じて動かさなければいけません(実現したいことはあってるでしょうか)

js

1const average = (array) => array.reduce((accum, cur) => accum + cur, 0) / array.length; 2 3const animate = () => { 4 bar.animate(average([check1.checked, check2.checked, check3.checked])); 5}; 6 7const check1 = document.getElementById("check1"); 8check1.addEventListener("click", animate); 9 10const check2 = document.getElementById("check2"); 11check2.addEventListener("click", animate); 12 13const check3 = document.getElementById("check3"); 14check3.addEventListener("click", animate);

averageは配列の平均値を求める関数です。

checkedはbooleanですが、+演算子で使う場合trueは1falseは0とみなされます。

js

1(1 + true) === 2 2(1 + false) === 1

つまり、チェックされている(1)とチェックされていない(0)の平均で進行度となります。

アロー関数(() => {})とreduceについては以下を参照してください。
アロー関数式 - JavaScript | MDN
Array.prototype.reduce() - JavaScript | MDN

投稿2021/07/31 00:46

ka2obushi

総合スコア173

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

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

kay1221

2021/07/31 23:25

迅速なご回答ありがとうございました! 実現イメージは仰る通りです。 こちらの通り、コードを記述したらイメージ通りの挙動となりました。 「どれをクリックしたかでなくいくつチェックしているか」 この考え方になれなかったのは悔しい。。。そして、とても勉強なります! checkedは演算子だとtrue === 1,false === 0になるのは知らなかった。。。 チェックボックスを任意の数で増やしたり減らしたりする場合もあるかと思いますのでaverageはとても便利な関数ですね。リファレンスもありがとうございます! 会社員やりつつ勉強していて、エンジニア転職を目指しています。 とても勉強になりました。
ka2obushi

2021/08/01 07:07

厳密に言うと true === 1の結果はfalseで true == 1の結果がtrueになりますね。 これは、「==」や「+」などの演算子が暗黙の型変換を行っているせいです。 (これがjavascriptで==ではなく===を使ったほうがいいと言われている理由です) 頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問