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

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

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

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

Q&A

解決済

3回答

1878閲覧

javascriptでHTMLの画像を徐々に上に移動させる方法。

mogumogu22

総合スコア24

JavaScript

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

0グッド

0クリップ

投稿2019/07/06 21:37

前提・実現したいこと

画像を徐々に上に移動していくようにしたいのですが、うまくいきません。
アドバイスいただけたら幸いです。

発生している問題・エラーメッセージ

画像が動かない。

該当のソースコード

js

1let timer; 2let y = 0; 3 4window.onload = function() { 5 top_text = document.getElementById('top_text'); 6 timer = setTimeout(function(){ 7 8 if(y <= 50){ 9 10 for(let i = 0 ; i < 51; i++){ 11 y++; 12 top_text.style.top ="'" +y +"px'"; 13 } 14 } 15 },10000); 16};

試したこと

top_text.style.top = "100px";に変更すると徐々にではないですが、上に上がりました。

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

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

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

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

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

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

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

guest

回答3

0

CSSアニメーションを使用してください。
最近はsetTimeoutやsetIntervalで動かすことは少ないです。
https://developer.mozilla.org/ja/docs/Web/CSS/CSS_Animations/Using_CSS_animations

投稿2019/07/07 05:50

yasutomi

総合スコア2937

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

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

mogumogu22

2019/07/07 09:36

そうなのですね!jsできたほうがいいのかなと思いやってましたが、そこまで必要なかったのですね^^; リンクありがとうございます!
guest

0

ベストアンサー

setTimeoutは指定した時間が経過したあとに1度だけ処理を実行する命令です。
指定した時間ごとに何度も処理が繰り返し実行されるsetIntervalを使いましょう。

また、提示されたコードではtop_text.style.topに100pxではなく'100px'が代入されてしまいます。

また、top指定は数字が大きくなるほど下になりますのでyをプラスしていくと上ではなく下に移動してしまいます。

javascript

1var y = 100; 2var timerId = setInterval(function() { 3 y--; 4 top_text.style.top = y + "px"; 5 if (y <= 0) { clearInterval(timerId ); } // y <= 0 のとき、繰り返し実行を停止 6}, 100);

投稿2019/07/07 01:57

ku__ra__ge

総合スコア4524

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

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

mogumogu22

2019/07/07 02:34

回答ありがとうございます^^ 無事上に動かすことができるようになりました! しかし、下記のように変更したのですが、1pxごとに移動してほしかったのですが、何十pxかごとに動いてしまいます。 setIntervalの時間を短くすると一見滑らかに動くように見えるのですが、動きが速すぎてしまいます。 setIntervalをforの中に入れても動きが変わりませんでした。 もし原因わかりそうでしたら教えて頂けませんでしょうか?よろしくお願い致します let timer; let y = 0; window.onload = function() { top_text = document.getElementById('top_text'); if(y <= 100){ timer = setInterval(function(){ for(let i = 0 ; i < 51; i++){ y++; top_text.style.bottom = y +"px"; // "100px"; } },1000); } };
KuwabataK

2019/07/07 08:30

横からで申し訳ありませんが・・・ setInterval関数自体が、一定時間ごとに繰り返し処理を行うためのものなので、その中にfor文を書くと2重にループされちゃいます。なのでfor文は不要です 回答に掲示されているコードでもfor文は使っていないと思います
mogumogu22

2019/07/07 09:32

なるほど!for抜いたらスムーズにできました! 助かりました、アドバイスありがとうございました^^ そして、コードまで書いてくださってたのにいまいち理解できてなくてすみませんでした><
guest

0

CSSのanimationで実現したほうが楽かつ綺麗に動くと思います。

後で詳しく書きます

投稿2019/07/07 04:36

oikashinoa

総合スコア2826

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

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

mogumogu22

2019/07/07 09:38

コメントありがとうございます! CSSのほうがきれいなのですね^^参考になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問