システム初心者です。よろしくお願いします。
現在javascriptを使ってimageオブジェクトで画像を読み込んで表示するプログラムを作っています。
html側
<img src="loading.gif">
<img src="" style="display:none;">
js側
function yobidashi(yousoid,url){
var previewImg = new Image();
previewImg.onload = function(){
document.getElementById(yousoid).src = url;
document.getElementById(yousoid).style.display = "block";
}
previewImg.onerror = function(){
console.info('error');
}
previewImg.src = url;
}
とやりたいのですが、画像が置いてあるフォルダにはページ読み込み後に画像がドロップされます。
処理としてonloadにいったりonerrorにいったりとなってしまいます。
どうすれば適確にonloadで読めるようになるでしょうか?
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
この場合yobidashi()は、いつどこで呼んでるのでしょう?
previewImg.onloadでパラメータをいじる理由はなんでしょう?
またpreviewImgはどこへ影響したいのでしょう?
No.2
- 回答日時:
こんにちは。
状況設定がよく理解できていませんが…
>画像が置いてあるフォルダにはページ読み込み後に
>画像がドロップされます。
画像が入れられたタイミングをスクリプトから感知できる仕組みが何らか存在するのなら、単純に、その後に読み込みにいくような制御をすればよいと思います。
スクリプト側からはタイミングがわからない場合は、ひたすら成功するまで(=読み込めるまで)繰り返すしか方法がないと思います。
しかし、いつ読めるのかわからない(永遠に読めないのかも知れない)画像を何度も読み込もうとトライする仕組みって、なんだか効率が悪すぎるような気もしますが…
urlが固定(?)でわかっていて(スクリプトに記述されているのでしょうから)、対象が(意図的に?)存在しない状況ってよくわからないですね。
・・・といった疑問は置いておいて、
具体的には、成功したらわかるようにフラグを用意しておいて、フラグがたってない間は、一定時間後に再度読込を行うような制御にしておけば一応動作すると思います。
読み込みのループが永遠に止まらないのも何なので、念のため、時間制限等を設けておいて、一定時間読み込めなければストップするようにしておいた方がよさそうに思います。
ご質問の内容とは、関係ありませんけれど・・・
previewImgとid付の要素を用いていらっしゃいますが、結局、同じ対象を読み込もうとしているので、あまり使い分ける意味もなさそうに感じます。
No.3
- 回答日時:
ちょっと試してみましたが
<script>
window.onload=function(){
var previewImg = new Image();
previewImg.src="hoge.jpg"; //(※)
previewImg.onload = function(){
console.log("load");
}
previewImg.onerror = function(){
console.log("error");
}
console.log("end");
}
</script>
(※)のところ、存在しないファイルを指定した場合と、
存在するけど画像ではないファイルを指定した場合はエラーになりました
逆に存在する画像ファイルを指定した場合、多少遅延があっても
ロードのほうが選ばれるようです(10秒ほど待たせましたが大丈夫でした)
そのあたりを踏まえて再確認してみてはどうでしょうか?
No.4
- 回答日時:
ANo2です。
ANo2で説明した方法で、あとから手動で画像ファイルを放り込むことで試してみましたが、予想通りに動作するようです。
しかしながら、ANo2にも書きましたように、この処理方法ってあまりほめられたものではないように感じます。
スクリプト云々よりも、全体のフローを考え直した方がよろしいのではないでしょうか?
>html側に
><script>yobidashi('sample','test/123456.jpg');</script>
このURLは固定のURLなのでしょうか?
それともサーバから可変で出力されるものなのでしょうか?
>上のtestフォルダにサーバー側のプログラムがjpg画像をドロップします
サーバから上記のURLを返して(出力して)おいてから、画像を出力しているのなら、順序を逆にするだけでjavascriptで後読みする必要がなくなりませんか?
>previewImg.srcで一度onerrorの方にいってしまいonerror内で再度
>yobidashiをリトライして、testフォルダに【123456.jpg】があっても
>onerrorの方にいってしまいます。
私がざっと試した時も、ローカル環境でIE(ver11)では似たような事象が発生しました。
原因は調べていませんが、fxでは発生していません。
一方で、いずれのブラウザもサーバ環境であれば予定通りに動作しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Perl 画像が表示でnull; this.src 1 2022/04/19 11:31
- HTML・CSS PCサイズで赤い画像2つと、青い画像2つがそれぞれ横に2つずつ並んでいるのですが、これをスマホサイズ 5 2022/04/11 12:01
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Gifアニメ、最後のコマに行った...
-
HTMLで条件分岐はできますか?
-
画像ランダム表示、しかしダブ...
-
javascriptで毎月替わる画像
-
画像をクリックしてその地点の...
-
画像クリック→メッセージボック...
-
innerHTMLで、表示すると、一部...
-
画像を切り替えランダム表示
-
lightboxで複数サムネイル表示
-
JavaScriptでスライドショー
-
曜日と時間を指定して表示画像...
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
jqueryのsortableで一部ソート...
-
removeEventListenerについて
-
Slick.jsのオプションrtlについて
-
JavaScriptで変更した属性の元...
-
どの<li><a> が押されたか判別...
-
複数画像のランダム複数表示(...
-
クリックで色変更後に既に変更...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
textareaに画像を表示したい
-
JavaScript スライドの画像にリ...
-
1枚の画像をクリックして複数の...
-
HTMLで条件分岐はできますか?
-
Javascript で共通の処理をどこ...
-
Gifアニメ、最後のコマに行った...
-
JavaScriptとチェックボックス...
-
画像の重なりの順序を代える方...
-
画像ランダム表示、しかしダブ...
-
javascriptで毎月替わる画像
-
1枚の画像をクリックすると複数...
-
オンマウスで、画像切り替え+...
-
透過pngの透明部分以外をクリッ...
-
Javascriptで指定した日付と時...
-
jQueryスライドショー画像への...
-
JavaScript で flexslider の画...
-
lightbox2をiframeから外に表示...
-
重なった画像にクリックイベン...
-
Twitterの埋め込みしたWebペー...
-
画像をフォルダに入れれば表示...
おすすめ情報
説明不足ですいません。
html側に
<script>yobidashi('sample','test/123456.jpg');</script>
上のtestフォルダにサーバー側のプログラムがjpg画像をドロップします。
previewImg.srcで一度onerrorの方にいってしまいonerror内で再度yobidashiをリトライして、testフォルダに【123456.jpg】があってもonerrorの方にいってしまいます。