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

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

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

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

HTML5

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

JavaScript

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

jQuery

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

Q&A

解決済

1回答

588閲覧

プログレスバーのようなもの実装について

yourai

総合スコア20

CSS3

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

HTML5

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

JavaScript

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

jQuery

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

1グッド

1クリップ

投稿2020/03/15 05:42

プログレスバーのようなものを作成しようとしていますが、うまく動作しないというか、疑問点と追加したい動きがあるのですが
どなたかご教授いただけますでしょうか。
参考は下記になります。
https://designsupply-web.com/knowledgeside/2930/

完成の動きのイメージはcssで記載しているところの、
transform: scaleX(0);がscaleX(1);
になるイメージになります。
png画像が黒いベタで塗られていくような、、

【疑問点】
・参考のページでは、何故img要素を取得するのに、$("<img>")という<>つきの書き方をしているのか。
・setInterval構文無しでも動く気がしましたが動きませんでした。。何故なんでしょうか、、??

【追加したい動き】
プログレスの動きが完了した時にコールバックとしてロード画面を消したいです。

html

1<div id="loader"> 2 <div class="loading_logo"> 3 <div class="loading_bg"></div> 4 <div class="loading_progress"></div> 5 <div class="loading_cover"></div> 6 </div> 7</div>

css

1#loader { 2 width: 100%; 3 height: 100%; 4 background-color: #fff; 5 position: fixed; 6 top: 0; 7 left: 0; 8 z-index: 100; 9.loading_logo { 10 width: 200px; 11 height: 200px; 12 position: relative; 13 top: 50%; 14 left: 50%; 15 transform: translate(-50%, -50%); 16 .loading_bg { 17 background: #666; 18 position: absolute; 19 top: 0%; 20 left: 0%; 21 width: 100%; 22 height: 100%; 23 } 24 .loading_progress { 25 position: absolute; 26 top: 0%; 27 left: 0%; 28 width: 100%; 29 height: 100%; 30 background: #000; 31 transform: scaleX(0); 32 transform-origin: left; 33 transition: transform 1s linear; 34 } 35 .loading_cover { 36 position: absolute; 37 top: 0; 38 width: 100%; 39 height: 100%; 40 background: url(../img/loading_logo.png) no-repeat; 41 } 42} 43}

javascript

1$(function(){ 2 var progress = 0; 3var imgCount = $('img').length; 4$("img").each(function(){ 5 var src = $(this).attr('src'); 6 $("<img>").attr('src',src).on('load',function(){ 7 progress++; 8 }); 9}); 10 11setInterval(function(){ 12 $(".loading_progress").css({ 13 "transform" : 'scaleX('+ progress / imgCount +')' 14 }); 15}, 1000); 16 17 18 19});
s.k👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

・参考のページでは、何故img要素を取得するのに、$("<img>")という<>つきの書き方をしているのか。

画像はすでに読み込まれている可能性があります。この場合は complete プロパティを見ればいいのですが、簡単のために src 属性を同じにした別要素を用意して利用しているものと思います。

・setInterval構文無しでも動く気がしましたが動きませんでした。

動いてしまい確認できませんでした。何か間違っているのかもしれません。

完了した時にコールバックとしてロード画面を消したい

1秒後に消すなどが考えられると思います。

jQuery

1 if (progress === imgCount) { 2 setTimeout(function() { $('#loader').remove(); }, 1000); 3 }

setInterval() なので終了後も動き続けるのが気になります。

投稿2020/03/16 05:41

x_x

総合スコア13749

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

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

yourai

2020/03/16 09:04

x_x様 回答ありがとうございます。 $("<img>")についての、 >>画像はすでに読み込まれている可能性があります。 とありますが、ちゃんとしたプログレスバーの動きとは違ってくるのでしょうか、、??
x_x

2020/03/16 09:07

読み込み済みのものがあると後からつけた onload が走らないため、完了しなくなります。
yourai

2020/03/16 09:46

なるほど、、ただやはり根本的な$("<img>")の<>付きの書き方がいくら探しても出てこないのですが、、 根本的な質問で申し訳ありません。。
yourai

2020/03/16 13:42

あ、ページのimgを読んでから、そのsrc属性を、空の生成した<img>のsrcに書き換えてることで疑似的なプログレスバーを作ってるんでしょうか、? なるほど、、
yourai

2020/03/17 15:37

1つ追加で質問なのですが、、ロード時に、一瞬pngをマスクする黒いdivが表示されてしまうのですが、、これはしょうがないのでしょうか??
x_x

2020/03/18 00:25

それは確認できなかったのですが、何のブラウザを使ってますか?
yourai

2020/03/18 01:48

ご回答ありがとうございます。 失礼しました、黒のdivでは無く、#666で指定している.loading_bgが一瞬表示されるようです。 iPhone、safariで見たときに、毎回なるわけではないのですが、若干気になります、、。 マスクの画像を背景で指定している→img要素の読み込みにはカウントされない為時差が生じてしまっているのでしょうか、、
x_x

2020/03/18 02:26

.loading_bg は参考にしたサイトにはない部分で、 yourai さんがそのようにしたくて書いているのではないでしょうか? loading_logo.png には透過画像を使っているのかと思っていましたが、そうでないならそもそも進捗状態が画像によって隠れてしまっているのではないですか?
yourai

2020/03/18 07:20

.loading_bg は参考にしたサイトにはない部分で、 yourai さんがそのようにしたくて書いているのではないでしょうか? >>そうなります。具体的にご提示できるサイトが無いのですが、 z-index的に下から、 ①グレーのベタ塗りレイヤー ②scaleX(1)にさせる黒レイヤー ③ABCという文字(これがloading_logo.pngになるのですが、文字の部分を白抜きしたものになります)がプログレスの進捗にしたがって、②がscaleX(1)になっていくに伴い黒く塗られていくように見えるイメージです、ただ、その動き自体はうまくいっています。 背景画像として③を設定してるのでチラつくんですかね、、
yourai

2020/03/19 05:52

①グレーのベタ塗りレイヤー ②scaleX(1)にさせる黒レイヤー をopacity:0にしておいて、onload時に1にするスクリプトを記載したら解決いたしました、、!(おそらく) 勉強になりました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問