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

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

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

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

jQuery

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

CSS

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

Q&A

解決済

2回答

2956閲覧

要素の回転速度を変更したときの挙動

XCUBE

総合スコア101

JavaScript

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

jQuery

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

CSS

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

0グッド

1クリップ

投稿2018/09/14 04:31

編集2018/09/18 23:57

こちらのQiitaのサイトのようにある要素を回転させていく中で回転スピードを変更したいと思っています。
スピードの変更はできるのですが、変更が発生するたびに一旦回転角度がリセット(開始位置に戻る)されて回転動作がスムーズに見えなくなっています。
例えば、風車のように風の強弱で回転スピードが変わるように、速度値の上げ下げによって、そのときの角度を保ったまま速度を変えるにはゴリゴリにコードを書かなければ実装できないのでしょうか?

もし、そのような実装を経験された方がいましたらご教示していただけたらありがたいです。

-----訂正です。
一旦回転角度がリセット(開始位置に戻る)と思っていたのですが勘違いでした。
不特定の角度に進んだり戻ったりしているようです。

css

1 .squareBox { 2 position: absolute; 3 width: 100px; 4 height: 100px; 5 background-color: greenyellow; 6 margin-top: 50px; 7 margin-left: 50px; 8 animation-name: rotate; 9 animation-timing-function: linear; 10 animation-iteration-count: infinite; 11 animation-duration: 0s; 12 } 13 @keyframes rotate{ 14 0% { transform: rotate( 0deg); } 15 100% { transform: rotate(360deg); } 16 }

javascript

1 $(function () { 2 $("#speedNum").change(function () { // スピードの設定 3 $("#speedChange").text($("#speedNum").val()); 4 }); 5 6 $("#speedChange").click(function () { // スピード反映 7 var spnum = $("#speedNum").val(); 8 $(".squareBox").css('animation-duration', spnum + 's'); 9 $(".squareBox").text(spnum); 10 }); 11 });

html

1 <div class="squareBox">15</div> 2 <input type="range" name="speedNum" id="speedNum" max="30" min="0" step="1" value="15" /> 3 <button type="button" id="speedChange">speed</button>

結局、これを実現するにはjavascriptを書かなければできないと判りました。

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

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

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

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

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

spookybird

2018/09/14 05:17

css animation で作って一時停止したり個別にプロパティ変更してなんとかならないもんかとやってはみたものの一筋縄ではいきませんでした。非常に悔しい。
guest

回答2

0

ベストアンサー

いろいろと試行錯誤してみたのですが、ノードの入れ替えをしないとどうしてもうまくいかず、スムーズに動かすためにこのような形になってしまいました。

HTML

1<div class="squareBox"></div> 2<input type="range" name="speedNum" id="speedNum" max="30" min="1" step="1" value="30" /> 3<button type="button" id="speedChange">speed</button>

jQuery

1$("#speedChange").on('click', function(event) { 2 var spnum = parseFloat($("#speedNum").val()); 3 const matrix = getComputedStyle(document.querySelector('.squareBox')).transform.match(/[-\d.]+[^d]/g); 4 let rad = Math.atan2(parseFloat(matrix[1]), parseFloat(matrix[0])); 5 if (rad < 0) { rad += Math.PI * 2; } 6 const d = - spnum * rad / (Math.PI * 2); 7 $('.squareBox').replaceWith($('.squareBox').clone(false)); 8 $('.squareBox').css('animation', 'rotate ' + spnum.toString() + 's linear ' + d.toString() + 's both infinite'); 9});

animetionのkeyframesを途中から再生したい
https://teratail.com/questions/9518

-- 追記。念のため、CSSも書いておきます。

CSS

1.squareBox { 2 position: absolute; 3 width: 100px; 4 height: 100px; 5 margin-top: 50px; 6 margin-left: 50px; 7 background-color: aqua; 8 animation: rotate 30s linear both infinite; 9} 10 11@keyframes rotate { 12 100% { transform: rotateZ(360deg); } 13}

投稿2018/09/14 07:22

編集2018/09/18 08:02
x_x

総合スコア13749

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

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

XCUBE

2018/09/18 06:28

試行錯誤までしていただきありがとうございます。 コピペさせていただいてやってみたのですが、動作しませんでした(*_*) 多分、何か足りなかったんだと思いますが、もともと勘違いしていたことがあったり、edge、ieではそもそもスピードを変えても回転速度が変化しないようですので、cssを変更するやり方だけですと不十分だと判りましたので、もう一度じっくり考えたいと思います。
x_x

2018/09/18 06:34

環境がなかったためEdgeでの確認はしていませんが、IE11での確認はとっています。 この処理の不安なところはgetComputedStyle()で取った値を文字列処理しているところですが、変数matrixの値を出力してみて値が取れているか確認してみてはどうでしょうか?
s8_chu

2018/09/18 07:08 編集

横から失礼します。 XCUBEさん> 質問文のコードを見ると、`animation-duration`プロパティの値が`0s`になっていますが、x_xさんの回答のコードを試すとき、これは他の値になっていますか? `animation-duration`プロパティの値が`0s`の場合、アニメーションが行われないため、`transform`プロパティの値は`none`となり、エラーが発生すると思います。
x_x

2018/09/18 07:29

s8_chu さんのコメントで気づきましたが、コードを出したのですね。 通知なしで更新されても気づきませんよ
XCUBE

2018/09/18 09:17

s8_chuさん> 0にして停止している状態からanimation-durationを変えてみての動作と回転速度の変化を確認したかったのです。 回転速度の変化の中で停止している状態も考慮したためでした。 ご指摘ありがとうございます。 x_xさん> 通知のチェックはついたままにしたつもりだったのですが、チェックが外れてしまっていたかもしれません。 すいません。
XCUBE

2018/09/18 10:07

x_xさん cssの追加ありがとうございます。動作しました。 0sで停止も確認できました。理想的に動作しています。 試しにx_xさんの書いたものを私の書いたanimation-durationだけを書き換える方法に変えてみたのですが、 速度が変化したときに一旦不特定の角度に進んだり戻ったりして状況は元に戻りました。 なぜ、このような違いがあるのか不明ですが、改めてx_xさんの書いたものをよく調べさせていただこうと思います。 ありがとうございました。助かりました。
XCUBE

2018/09/18 10:27

わかりました。animation-delayを計算していたのですね。 大変勉強になりました。
guest

0

そうなりますね……

ただ、CSSアニメーションが完了したという情報はJSで検知出来ますので、
「次の回転から速くする」で妥協しても良ければ少ないコードで実現出来そうです。
https://qiita.com/chocodoughnut/items/6d4ae296b7c1494a858d

投稿2018/09/14 05:09

miyabi-sun

総合スコア21158

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

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

XCUBE

2018/09/18 09:21

ご回答ありがとうございます。 いろいろと悩んでみて難しいと判断したときはご提案いただいた"妥協"をさせていただきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問