🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

CSS

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

Q&A

解決済

1回答

812閲覧

CSS JavaScript アニメーションについて詳しい方いませんか?

ahk

総合スコア19

JavaScript

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

CSS

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

0グッド

0クリップ

投稿2021/01/06 15:50

JavaScriptとCSSの合わせ技でアニメーションを考えてます
obj.classList.add("x1")を動かすと、translateX(-200%)に行きます
その1秒後にobj.style.transform="translateX(200%)を動かします

左へ行った後、右へ行くという形になるのですが、
左に行く時はアニメーションさせ、
右へ行くのはアニメーションさせず一瞬で移動させるという方法はありませんでしょうか?

<style> .box1{ transform: translateX(0%); transition: 1s; } .box1.x1{ transform: translateX(-200%); } </style> <script> function move(){ obj.classList.add("x1"); setTimeout('obj.style.transform="translateX(200%)"',1000);//この部分の処理ではアニメーションさせず、即移動させたい } </script> <img id="obj" src="https://www.packaging.com/wp-content/uploads/product-samples.jpg" class="box1"> <input type="button" value="動かす" onclick="move()">

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

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

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

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

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

m.ts10806

2021/01/06 20:16

タイトルに要件がありません。 要件のみを記載してください
guest

回答1

0

ベストアンサー

下記でどうでしょうか。

css

1.box1{ 2 transform: translateX(0%); 3 transition: 0s; 4} 5.box1.x1{ 6 transform: translateX(-200%); 7 transition: 1s; 8}

js

1function move(){ 2obj.classList.add("x1"); 3setTimeout('obj.classList.remove("x1");obj.style.transform="translateX(200%)"',1000); 4}

別案

CSS animation を使ってみました。

CSS

1.box1{ 2 transform: translateX(0%); 3} 4.box1.x1{ 5 transform: translateX(200%); 6 animation: move 1s; 7} 8@keyframes move { 9 0% { 10 transform: translateX(0%); 11 } 12 100% { 13 transform: translateX(-200%); 14 } 15}

js

1function move(){ 2obj.classList.add("x1"); 3}

追記

最終的に元に位置に戻る。
ボタンをクリックするたびに繰り返す。
setTimeout は使わない。→animationend イベントを使う。

HTMLElement: animationend イベント - Web API | MDN

html

1<img id="obj" src="https://www.packaging.com/wp-content/uploads/product-samples.jpg" class="box1"> 2<input type="button" value="動かす" id="startbtn">

css

1.box1.x1{ 2 animation: move 2s; 3} 4 5@keyframes move { 6 0% { 7 transform: translateX(0%); 8 } 9 50% { 10 transform: translateX(-200%); 11 } 12 50.01% { 13 transform: translateX(200%); 14 } 15 100% { 16 transform: translateX(0%); 17 } 18}

js

1let target = document.querySelector('.box1'); 2document.querySelector('#startbtn').addEventListener('click', () => { 3 target.classList.add('x1'); 4}); 5target.addEventListener('animationend', () => { 6 target.classList.remove('x1'); 7});

投稿2021/01/06 17:05

編集2021/01/07 02:18
hatena19

総合スコア34073

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

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

ahk

2021/01/07 00:02 編集

こんにちは 回答ありがとうございます できればsetTimeoutを使わないでできないかと考えてました。ありがとうございます。 そこでなのですが、 私が最終的にやりたいのは、 アニメーションで左に動かし、一瞬で右へ移動、そして左へアニメーションさせ元の位置に戻す、 ボタンを押す度にこれを繰り返す動作でした 動作を実現させるに、一応下記でできたのですが、setTimeoutを2つ入れるハメになってしまいました <style> .box1{ transform: translateX(0%); transition: .3s; } </style> <script> function move(){ obj.style.transform="translateX(-200%)"; setTimeout("obj.style.transitionDuration = \"0s\";obj.style.transform=\"translateX(200%)\"",350); setTimeout("obj.style.transitionDuration = \"0.3s\";obj.style.transform=\"translateX(0%)\"",400); } </script> <img id="obj" src="https://www.packaging.com/wp-content/uploads/product-samples.jpg" class="box1"> <input type="button" value="動かす" onclick="move()">
ahk

2021/01/07 00:01

上記の動きをsetTimeoutを使わずkeyframesで実現させることはできますでしょうか?
hatena19

2021/01/07 00:08

別案の方のCSSを下記の変更したらどうでしょうか。 .box1.x1{ animation: move 2s; } @keyframes move { 0% { transform: translateX(0%); } 50% { transform: translateX(-200%); } 50.01% { transform: translateX(200%); } 100% { transform: translateX(0%); } }
ahk

2021/01/07 00:11

即回答ありがとうございます 動作できました 1回目の動作はできましたが、2回目以降は動きませんでした 何回でも動かせるようにすることはできますでしょうか?
ahk

2021/01/07 00:14

<script> function move(){ obj.classList.add("x1"); setTimeout("obj.classList.remove(\"x1\");",3000); } </script> こうしたところ2回目以降も動かせましたが、setTimeoutを使わなければ無理でしょうか?
ahk

2021/01/07 01:38

こんな手があったとは、、、 驚愕しました ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問