画像の読み込みを停止することはできませんが、通常の AJAX リクエストをキャンセルすることは可能です ( SO のこのソリューションを参照してください)。通常、画像は正当な理由で AJAX 経由では読み込まれませんが、画像を base64 でエンコードされた文字列として送信することでこれを回避できます。したがって、PHP にイメージを読み取らせて、base64 に変換させます。この文字列は、AJAX を介して JS に送信し、キャンバスに「直接」描画できます ( SO のソリューション)。
これがこれを行うための最良の方法であるかどうかは本当にわかりません...とにかく、これがうまくいくかどうかを確認してください:
HTML:
<canvas id="background" width="800" height="600"></canvas>
JavaScript: (jQuery を使用)
function drawBackgroundImage(src) {
var image = $("<img/>").load(function(){
$("canvas#background")[0].getContext("2d").drawImage(image[0], 0, 0);
}).attr("src", src);
}
function loadImage(highres, lowres) {
var t;
var xhr = $.ajax({
type: "POST",
url: "load_image.php",
data: "image=" + highres,
success: function(imgbinary){
if (imgbinary != "") {
clearTimeout(t);
drawBackgroundImage(imgbinary);
}
}
});
t = setTimeout(function(){
xhr.abort();
drawBackgroundImage(lowres);
}, 5000);
}
loadImage("path/to/highres.png", "path/to/low_res.png");
PHP: (load_image.php)
(これはPHP マニュアルの関数の一部を使用します。)
<?php
$result = "";
@ob_start();
if (isset($_POST["image"])) {
$filename = $_POST["image"];
if (file_exists($filename)) {
$filetype = pathinfo($filename, PATHINFO_EXTENSION);
$imgbinary = fread(fopen($filename, "r"), filesize($filename));
$result = "data:image/".$filetype.";base64,".base64_encode($imgbinary);
}
}
@ob_end_clean();
echo $result;
?>