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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

1回答

893閲覧

javascriptのアニメーションで.reverse()が次回以降も効いてしまう

stline

総合スコア1

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2021/05/12 22:14

編集2021/05/12 22:31

前提・実現したいこと

ボタンをマウスホバーすると左から右へアニメーションし、マウスアウトで左へ逆再生で戻るようにしたい。

javascriptのアニメーションで.reverse()が効き続けてしまう。

該当のソースコード

【html】 <body> <div id="red-ball"></div> <div class="buttons"> <button id="play">PLAY</button> </div> </body> 【css】 * { margin: 0; padding: 0; } body { margin: 0; overflow: hidden; min-height: 100vh; } #red-ball { background: red; width: 50px; height: 50px; border-radius: 50%; margin: 50px 0; } button { padding: 10px; margin-top: 10px; } 【js】 const play = document.getElementById('play'); const moveXBall = document.getElementById('red-ball').animate([ { 'transform': 'translate(0vw)', 'offset': 0, easing: 'ease-in-out' }, { 'transform': 'translate(20vw)', 'offset': 0.2, easing: 'ease-out' }, { 'transform': 'translate(17vw)', 'offset': 0.6, easing: 'ease-in' }, { 'transform': 'translate(30vw)', 'offset': 1, easing: 'ease-in-out' } ], { duration: 3000, easing: 'ease', fill: 'forwards', } ); moveXBall.pause(); play.addEventListener('mouseenter', () => { moveXBall.play(); }); play.addEventListener('mouseleave', () => { moveXBall.reverse(); });

試したこと

moveXBall.onfinish = () => {
moveXBall.reverse();
moveXBall.pause();
};
こちらを追加すればアニメーション途中での逆再生は上手くいったのですが、今度は逆に完了後の逆再生で戻らなくなってしまいました。
初歩的なことかもしれませんが、お詳しい方がおりましたらどうぞよろしくお願いいたします。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

試してみましたが、reverse()の挙動がちょっとおかしいかもしれませんね。

js

1play.addEventListener('mouseenter', () => { 2 moveXBall.playbackRate = 1; 3 moveXBall.play(); 4}); 5play.addEventListener('mouseleave', () => { 6 moveXBall.playbackRate = -1; 7 moveXBall.play(); 8});

投稿2021/05/12 23:33

macaron_xxx

総合スコア3191

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

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

stline

2021/05/13 06:21

ありがとうございました! .playbackRateを利用する発想が思い浮かばず、色々な方法を数日間さがしてました。 reverse()使いづらいですね。 本当に助かりました。精進いたします。
stline

2021/05/17 19:53

ありがとうございます。 そちらのページは何度も見ていたのですが見落としていました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問