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

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

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

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

Q&A

1回答

1586閲覧

JavaScriptでローディング画面表示開始時間を操作したい

RYUSEITANIGUCHI

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2021/06/16 08:46

編集2021/06/16 12:28

JavaScriptでローディング画面表示開始時間を操作したい

https://www.webcreatorbox.com/tech/loading-animation
↑このページを参考に、ページ遷移時にロードが完了したらローディング画面をhiddenにすることはできました。ただローディング時間が短い時はフラッシュのようになるため、最初はhiddenにしておいて、クリックから2秒以上経過してもなおローディング中の場合はローディング画面を表示し、完了後に再度hiddenにしたいです。

つまり

pseudo

1クリック(タイマー開始) 23Djangoのviewにてプログラムを実行開始 452秒経過→(template作成+ロード完了)なにもしない 67(まだ実行中)loading pageを表示 89(ロード完了)loading pageを非表示にしtemplateを表示する

を想定しています。

###懸念点
Djangoを使用しており、定期的にviewでごちゃごちゃやっているためその時はページ遷移に時間がかかってしまいます。<script>をhtmlのheaderに持ってこようと考えましたがページが構成されてからのロードは速いためこれでは解決できないと考えてます。知見をお聞かせください。よろしくお願いいたします。

現在

上の途中まではできたので下に示しておきます。

HTML

1<!--ローディング画面--> 2<div id="loading"> 3 <svg ....> 4 ....... 5 </svg> 6</div>

CSS

1#loading { 2 visibility: hidden; 3} 4.still_loading { 5 visibility: visible; 6} 7.loaded { 8 visibility: hidden; 9} 10

JS

1<!--HTMLファイルの一番下--> 2<script> 3 window.onload = function() { 4 document.getElementById('loading').style = "visibility: hidden"; 5 }

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

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

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

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

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

guest

回答1

0

記載されてる懸念点についてはよく理解できなかったので、

最初はhiddenにしておいて、クリックから2秒以上経過してもなおローディング中の場合はローディング画面を表示し、完了後に再度hiddenにしたいです。

の部分についてですが、以下のようなスクリプトで実現できるかと思われます。

javascript

1<!--HTMLファイルの一番下--> 2<script> 3const loadingContainer = document.querySelector("#loading"); 4 5// script読み込みから2秒後に実行される 6// ローディング画面表示処理 7const timeout = setTimeout(() => { 8 loadingContainer.style.visiblity = "hidden"; 9}, 2000); 10 11window.onload = () => { 12 // リソース読み込み完了時に 13 // ローディング画面表示処理をキャンセル 14 clearTimeout(timeout); 15}; 16</script>

追記

サーバからクライアントへ送信した時点ではなく、クライアントがサーバへリクエストしたときにロード画面を表示することはJSで可能なのでしょうか?

この場合遷移後の画面でロード画面の処理を定義することは不可能です。

遷移前の画面でクリックイベントを検知してJavaScriptでロード画面を表示し、バックエンドでの計算処理が完了してレスポンスが返ってくるのを待つことになります。

遷移前の画面で表示するロード画面と遷移後の画面で表示するロード画面の見た目を近くしておくことで、ある程度シームレスな感じを出すことはできます。

投稿2021/06/16 11:58

編集2021/06/16 12:54
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

RYUSEITANIGUCHI

2021/06/16 13:14 編集

const loadingContainer = document.querySelector("#loading"); // script読み込みから2秒後に実行される // ローディング画面表示処理 const timeout = setTimeout(() => { loadingContainer.style.visibility = "visible"; }, 2000); window.onload = () => { // リソース読み込み完了時に // ローディング画面表示処理をキャンセル clearTimeout(timeout); loadingContainer.style.visibility = "hidden"; }; このようにすることでページ遷移から2秒以内のロード完了ならば何もしない。2秒以上かかるならロードが完了するまでロード画面を表示し、完了後にロード画面非表示を実装することができました。ありがとうございます。 例えば、サーバからクライアントへ送信した時点ではなく、クライアントがサーバへリクエストしたときにロード画面を表示することはJSで可能なのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問