У меня такой код:

<script type="text/javascript">
var image1=new Image()
image1.src="images/natandadam.jpg"

var image2=new Image()
image2.src="images/gardaa.jpg"

var image3=new Image()
image3.src="images/marmaris.jpg"

var image4=new Image()
image4.src="images/gardab.jpg"

var image5=new Image()
image5.src="images/engagement.jpg"

var image6=new Image()
image6.src="images/gardac.jpg"

var image7=new Image()
image7.src="images/natandadamlake.jpg"

//-->
</script>

<script>
<!--
//variable that will increment through the images
var step=1

function slideit(){
    //if browser does not support the image object, exit.
    if (!document.images) {
        return;
    }
    document.images.slide.src=eval("image"+step+".src");

    if (step<7) {
        step++;
    } else {
        step=1;
    }

    //call function "slideit()" every 2.5 seconds
    setTimeout("slideit()",2500);
}

slideit();
//-->
</script>

... и это вызывает это:

<img style="border:6px double #545565;"  src="gardaa.jpg" name="slide" width=600 height=400>

Я хочу, чтобы он продолжал пропускать изображения, но останавливался на последнем. Это повторялось, когда у него было только три изображения; Теперь я добавил больше, его остановили.

Что мне изменить, чтобы они повторялись?

0
addio 29 Мар 2011 в 00:55
Если вы можете это сделать, я настоятельно рекомендую использовать для этого jQuery. Существует бесчисленное множество плагинов для фотогалерей, и они, как правило, довольно просты в использовании.
 – 
Ender
29 Мар 2011 в 01:12
Хе... этот код в основном делает все неправильно, что можно сделать неправильно: не использовать массивы, где это уместно, использовать eval, когда это совершенно не нужно, передавать строку в setTimeout (и, таким образом, неявно использовать eval), смешивая код без точки с запятой и обычный код.
 – 
ThiefMaster
29 Мар 2011 в 01:22
1
OP скопировал его прямо из этого руководства: javascriptkit.com/howto/show2.shtml. У меня от этого сайта мурашки по коже...
 – 
Ender
29 Мар 2011 в 01:24

1 ответ

Вы можете немного упростить свой скрипт:

<script type="text/javascript">  
var images ="natandadam.jpg,gardaa.jpg,marmaris.jpg,gardab.jpg,engagement.jpg,gardac.jpg,natandadamlake.jpg".split(",")
var step=1

function slideit(){
   document.images.slide.src="images/" + images[step]
   step++
   if(step>images.length) {
       step = 1
   }
   setTimeout(function(){slideit()},2500);
}

slideit();

</script>

Несколько советов:

1 - вам не нужно использовать <!-- и //-->, чтобы скрыть свой скрипт. Единственный браузер, который требовал этого, умер в 90-х.

2 - не используйте eval(), это зло.

3 - так как изображения теперь находятся в массиве, вы можете проверить добавление или удаление и сколько угодно без использования if (step<7). Код просто проверяет длину массива.

4. Используйте так называемую анонимную функцию в setTimeout вместо цитирования кода. Код цитирования использует eval() внутри.

3
Diodeus - James MacFarlane 29 Мар 2011 в 01:29