3

この問題のために、ディレクトリを調べてファイルのリストを返す PHP コードのスニペットがあります。次に、配列を調べて、echo を使用して各ファイル名を JavaScript 変数として保存します。

次の例では、イメージ名の生成に使用される PHP が含まれていません。

//result of PHP
image1="cow.jpg"  
image2="pig.jpg"
image3="dog.jpg"

imgIndex=0 //global variable that will be incremented

function setBG(image) {
    someElement.style.backgroundImage= "url(/images/" + image + ")"
};

function nextBG(){
    imgIndex++
    currentIMG="image"+imgIndex;
    setBG(currentIMG);
};

呼び出されたとき、関数は機能しnextBG()ません。しかし、これは:

function nextBG(){
    setBG(image1);
};

機能しない理由は、2 番目の例が定義された変数 (cow.jpg) の値を使用して関数を呼び出しているためだと思います。しかし、最初の例は文字列 を使用して関数を呼び出しています"image1"。 witch は明らかに画像のパス名ではありません。

image1変数を使用image2して関数を呼び出す方法はありimage3ますか?

4

3 に答える 3

1

最も簡単な解決策は、すべての画像を配列に格納することです。

var bgImages = [
    // All can be got with a call to encode your PHP array as JSON.
    "cow.jpg",
    "horse.jpg",
    "dog.jpg",
    "pig.jpg"
    ],
    imageIndex = 0,
    maxLength = bgImages.length - 1;

function setBG(image) {
    someElement.style.backgroundImage= "url(/images/" + image + ")"
};

function nextBG(){
    var currentIMG = bgImages[imageIndex];
    setBG(currentIMG);
    imageIndex = imageIndex > maxLength ? 0 : imageIndex + 1;
};
于 2012-08-14T03:18:35.957 に答える
1

変数をオブジェクトのメンバーにします。次に、[]を使用して、文字列を使用してオブジェクトメンバーにアクセスできます。

var images = {
  image1 : "cow.jpg",  
  image2 : "pig.jpg",
  image3 : "dog.jpg"
};

function nextBG(){
    imgIndex++
    currentIMG="image"+imgIndex;
    setBG(images[currentIMG]);
};
于 2012-08-14T03:19:02.217 に答える
0

これは、currentIMGが変数ではなく文字列であるためです。これがあなたがしたいことです。配列$imagesがあります。これは単なる画像名です。HTMLで、これを行います

var images = <?php echo json_encode($images); ?>;

そして、JavaScriptをそのまま使用できます

for(var i=0; var i < images; i++)
{
    setBG(images[i]);
}
于 2012-08-14T03:19:39.313 に答える