Использование setTimeout - как передать параметры? - PullRequest
0 голосов
/ 17 декабря 2008

Я пытаюсь создать слайд-шоу с паузой между слайдами. Поэтому я пытаюсь использовать оператор setTimeout, как показано ниже. Это записано для замены 2.jpg на 1.jpg с паузой в 10 секунд при нажатии на кнопку Но теперь это работает. Может кто-нибудь мне помочь. Спасибо.

<html>
<head>
<script type="text/javascript">
var t;
function swap(newImage) {
  var fileName=newImage.toString()+".jpg"
  document.slideshow.src=fileName
  t=setTimeout("swap()",10000)
}
</script>
</head>  
<body> 
  <img name="slideshow" src="1.jpg" width="450" height="335" />
  <br /><br />
  <input type="button" onClick="swap('2')" value="Change image" /> 
  <br /><br />
</body>
</html> 

Ответы [ 3 ]

6 голосов
/ 17 декабря 2008

Здесь есть пара неправильных вещей. Во-первых, его код передачи, который должен быть оценен в первом параметре setTimeout , не рекомендуется. Вместо этого лучше передать обратный вызов:

 setTimeout(function() { swap(); },10000);
 //Or
 setTimeout(swap,10000); //Passing the actual function as the callback

Во-вторых, вы вызываете метод swap () без параметров в течение времени ожидания. Он должен передать новое имя файла изображения (возможно, объявив массив имен файлов) или проверить, установлен ли параметр или нет.

function swap(newImage,element) { 
   if(newImage) {
       var fileName = newImage.toString()+".jpg"; 
       element.src = fileName;
   }
   t=setTimeout(this,10000) 
}

Эта функция, очевидно, ничего не будет делать после первого запуска (поскольку не указаны новые имена файлов изображений). Используя массив, вы можете перебирать несколько имен файлов:

var images = ['1.jpg','2.jpg','3.jpg'];
var slideshow = function(element, images, index) {
   if(!index || ( (index + 1) > images.length) ) index = 0;
   element.src = images[index];
   t = setTimeout(function(){
       slideshow(element, images, index + 1);
   },10000) 
};

//Fetch the image element the slideshow is running on
var element = document.slideshow; 
slideshow(element, images);

Это будет продолжать переключаться между изображениями в массиве до тех пор, пока тайм-аут не будет отменен.

2 голосов
/ 17 декабря 2008

Вашей функции подкачки требуется параметр, поэтому она не будет работать с setTimeout.

0 голосов
/ 17 декабря 2008

Javascript не требуется для создания слайд-шоу. Все, что вам нужно сделать, это поместить каждое изображение на отдельную страницу, а затем добавить эту единственную строку вверху каждой страницы в разделе :

<meta http-equiv="refresh" content="10;url=NextPage.html"/>

«10» - это количество секунд ожидания перед переходом на следующую страницу, а «NextPage.html» - ссылка на страницу, содержащую следующее изображение для отображения.

...