1

iPhone/iPad で SVG を表示しようとしています。このコードは ASP.Net ページで実行されています。Raphael を使用して、Raphael が処理するグラフィックとその他すべてのジャズを表示しています。ただし、実際には iOS で実行されないコードがあります。

 img = new Image();

 //img.onload = function () { drawLayersWhenAllAreLoaded(); };
 if (img.addEventListener) {
     img.addEventListener('load', drawLayersWhenAllAreLoaded, false);
 }
 else {
     img.attachEvent("onload", function () { return (drawLayersWhenAllAreLoaded.call(img, window.event)); });
 }

 img.src = files[i];

Windows の Chrome、Firefox、および Safari でこれをテストしましたが、うまく機能します。Mac OS X の Chrome、Firefox、および Safari でこれをテストしましたが、うまく機能します。ただし、iOS (iOS 6 か iOS 7 か、iPhone か iPad かは問いません) で実行する場合、drawLayersWhenAllAreLoaded関数は実行されません。実行されない場合、画像は画面に表示されません。

これは私がテストした最終的なコードです。iOSをチェックしないことをテストしました。だけを使用してテストしましたimg.onload。使ってみただけimg.addEventListenerです。最も単純なものから最も複雑なものまで、このコードのすべてのバージョンを試してみましたが、まったく機能しません。にアラートを配置すると、drawLayersWhenAllAreLoaded上記のすべてのブラウザーで表示されますが、iOS では表示されません。

私の理解ではsrc、HTML/jQuery で画像の を設定すると、画像が読み込まれます。画像はかなり大きくなる可能性があるため、呼び出す前にすべての画像が読み込まれるのを待つ必要がありますdrawLayersWhenAllAreLoaded(このコードは、一連の画像を読み込むループ内にあります)。

似たようなものを探して何時間も Google を検索しましたが、何も見つかりませんでした。誰かがこれに再び遭遇したかどうか、または私が間違っていることを知りたいですか?

ありがとう。

編集済み

さらにテストを重ねた結果、drawLayersWhenAllAreLoaded攻撃を受けるのは 1 回だけであることがわかりました。現在、32枚の画像を読み込もうとしています。画像をロードするコードは iOS で 32 回実行されますが (毎回アラートを追加すると表示されます)、drawLayersWhenAllAreLoadedは 1 回しか呼び出されません。

4

1 に答える 1

0

それで、loadメソッドを実行できるようになりました。コードを使用するように切り替えましたがimagesLoaded( http://desandro.github.io/imagesloaded/ )、それでも問題は解決しませんでした。Mobile Safari では、DOM に追加されていないオブジェクトは読み込まれないようです。動的に生成された画像を に追加するとdiv、機能し始めました。これが Apple のメモリ目的の設計によるものなのか、それとも単なる問題なのかはわかりません。

この問題に遭遇する可能性のある他の誰かを助けるために、これを投稿すると思いました。

var $img = $('<img>').attr('src', files[i])
              .css({
                 "position":"absolute",
                 "top":"0px",
                 "left":"0px",)
             .prependTo(".canvas").imagesLoaded(function () {
                    drawLayersWhenAllAreLoaded();
});
于 2013-10-21T14:58:17.203 に答える