0

私は間違いなくまだJavascriptを学んでいるので、これが非常に基本的な質問である場合はご容赦ください。

画像のURLのリストをローテーションしてhrefにしようとしています。URLがWebサービスに渡され、画像の詳細変数が詳細に示されるため、すべてのURLに疑問符が含まれています。ヘッダーでは、php$imgArrを個別のjavascriptImageオブジェクトの.src値に分割しました。この時点まで、すべてが正常に機能しています。

画像のURL例:http://webservices.ashx?size=25

<script type="text/javascript">
<!--
var step = 1;
var timeOut;

function playforward() {
    if (!document.images) return
    alert(eval("image" + step + ".src"));
    document.images.slideleft.src = eval("image" + step + ".src")
    if (step < <?php echo count($imgArr); ?> ) step++
    else step = 1
    timeOut = setTimeout("playforward()", 500)
}

function stopPlay() {
    clearTimeout(timeOut);
}
//-->
</script>

上記のコードでは、画像番号を循環するステップ変数を含むベース画像名のアラートがあります。アラートボックスがポップアップすると、画像のURLは正しいですが、アラートボックスを取り出してページを実行すると、画像がエラーになり、疑問符の後のすべてがプロパティに表示されます。

私はevalが優れたソリューションではないことを理解するのに十分知っていますが、より良いソリューションはわかりません。誰か提案がありますか?

編集:

リクエストに応じて、画像変数を作成するために使用しているコードを次に示します。このコードはCodeigniterControllerで呼び出され、ドキュメントヘッダーに渡されます。私はそれが大いに役立つとは思わないが、ここにそれがある:

for($i = 0; $i < count($imgArr); $i++)
    {
     $urlPieces = explode('?', $imgArr[$i]);
     $num = $i+1;
     $images .= 'var image'. $num .'=new Image()
       imageleft'. $num .'.src="'.$urlPieces[0].'" + "?" + "'.$urlPieces[1].'"; ';
    }
4

2 に答える 2

1

evalコードで使用する必要がある理由はまったくありません。

そうは言っ<? php ...ても<?php

<script type="text/javascript">

    var step = 1;
    var timeOut;

    function playforward() {
        if (!document.images) {
            return;
        }

        alert(window['image' + step].src);
        document.images.slideleft.src = window['image' + step].src;

        if (step < <?php echo count($imgArr); ?> ) {
           step++;
        } else {
           step = 1;
        }

        timeOut = setTimeout(playforward, 500);
    }

    function stopPlay() {
        clearTimeout(timeOut);
    }
</script>
于 2012-08-01T19:44:49.087 に答える
0

、などimage1の変数があります。image2

その代わりにimages、配列にします。

var images = [];

だから、あなたはすることができます:

$images .= 'images['. $num .']=new Image()'

次に、JavaScriptで次を使用できます。

images[step].src

PSに文字列を渡さないでくださいsetTimeout、関数を渡してください:

setTimeout(playforward, 500)
于 2012-08-01T19:46:07.297 に答える