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

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

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

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

jQuery

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

CSS

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

Q&A

解決済

1回答

851閲覧

SVG 円アニメーションの挙動がおかしい

hamunbo

総合スコア10

JavaScript

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

jQuery

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

CSS

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

0グッド

0クリップ

投稿2021/07/13 11:05

下記のような形で円を0~100までSVGアニメーションで動かしたいと思っております。
![イメージ説明イメージ説明

アニメーション自体は動いており、100まで到達するのですが、「stroke-dasharray」パラメータに「from, to」の両方を指定することができず、
100までに到達するまでにクルクル回った変な挙動となってしまいます。
「from, to」が指定されるとうまくいくはずなのですが、指定できず困っております。

Javascript

1 2$(function () { 3 var $circle = $('#circle'); 4 $circle.animate({'stroke-dasharray': '0 100'}, 3000); 5});

方法ありましたらご教授お願い致します。

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

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

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

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

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

yambejp

2021/07/13 11:25

外側の輪について0%のグレーが100%のオレンジにどうやってかわるのですか?
runnynose

2021/07/13 14:40

JSだけだと動作を再現できないので、HTMLのソースもあると良いと思います。
guest

回答1

0

ベストアンサー

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 document.querySelector('#btn').addEventListener('click', ()=>{ 4 const stroke_color="orange"; 5 const text_color="black"; 6 const base_color="gold"; 7 const radian=180/Math.PI; 8 const cx=100; 9 const cy=100; 10 const r=80; 11 const S=-90; 12 let E=S; 13 let per=0; 14 const max_per=100; 15 const p1=document.querySelector('#p1'); 16 const t1=[["x",cx],["y",cy]].reduce((x,y)=>(x.setAttribute(y[0],y[1]),x),document.querySelector('#t1')); 17 const speed1=2; // bigger is faster 18 const speed2=10; // smaller is faster 19 p1.setAttribute('stroke',stroke_color); 20 p2.setAttribute('fill',base_color); 21 t1.setAttribute('fill',text_color); 22 var timerId=setInterval(()=>{ 23 E+=speed1; 24 per=Math.round((E-S)/360*100); 25 if(per>=max_per){ 26 per=max_per; 27 E=per/100*360+S; 28 clearInterval(timerId); 29 } 30 if(per>=100){ 31 E-=0.1; 32 } 33 let f1=(E-S)<=180?0:1; 34 let x1=cx+r*Math.cos(S/radian); 35 let y1=cy+r*Math.sin(S/radian); 36 let x2=cx+r*Math.cos(E/radian); 37 let y2=cy+r*Math.sin(E/radian); 38 let dx=x2-x1; 39 let dy=y2-y1; 40 let d1=`M ${x1},${y1} a ${r} ${r} ${S} ${f1} 1 ${dx},${dy} `; 41 let d2=d1+`L ${cx},${cy}`; 42 p2.setAttribute('d',d2); 43 p1.setAttribute('d',d1); 44 t1.textContent=per+"%"; 45 },speed2); 46 }); 47}); 48</script> 49<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg"> 50<circle cx="100" cy="100" r="80" fill="lightgray" stroke-width="10" stroke="gray" /> 51<path id="p2" d="" fill="none" /> 52<path id="p1" d="" fill="none" stroke-width="10" /> 53<text id="t1" x="50%" y="50%" text-anchor="middle" dominant-baseline="central" fill="black" font-size="20px" >0%</text> 54</svg> 55<input type="button" value="btn" id="btn">

※ゴミがまざってたので削除

投稿2021/07/13 11:47

編集2021/07/14 07:15
yambejp

総合スコア116724

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問