Почему я не могу ссылаться на массив изображений?

#javascript #html

#javascript #HTML

Вопрос:

я пытаюсь непрерывно менять изображения из массива, но код не получает источник изображения, почему это произошло?

 function nextPic(){
    var picCollection =["pic_bulbon.gif","pic_bulboff.gif"];
    for(i=0; i<picCollection.length; i  ){
        document.getElementById("myImage").src = picCollection[i].src;
    }
}

function triggers(){
    setInterval(nextPic,500);
}
 

Комментарии:

1. возможно, он не знает расположение файлов изображений. вы можете попробовать использовать стоковые изображения из Интернета

Ответ №1:

Возможно, ваш код должен быть

 var picCollection =["pic_bulbon.gif","pic_bulboff.gif"];
var i=0;
var interval;
function nextPic(){
    document.getElementById("myImage").src = picCollection[i];
    // if you want to repeat for show image again and again tehn use below line
    i= (i 1) % picCollection.length;

    // if you want not to repeat again then use below line
    // if(i 1>=picCollection.length) clearInterval(interval);
   
}

function triggers(){
    interval=setInterval(nextPic,500);
}
 

Здесь вы должны определить массив имен изображений в глобальном, который должен быть доступен во всех функциях desire. Хорошо, если вы сохраните ссылку на setInterval в переменной и очистите ее с помощью clearInterval .

Ответ №2:

Вам нужно создать глобальную переменную для номера изображения. Затем используйте этот внутренний обратный вызов, переданный setInterval . Приведенный выше код покажет только последнее изображение массива.

 let pic = 0;
const picCollection =["pic_bulbon.gif","pic_bulboff.gif"];

function nextPic(){
  document.getElementById("myImage").src = picCollection[pic];
  console.log("The pic shown is ", picCollection[pic])
  pic  ;
  if(pic === picCollection.length){
    pic = 0;
  }
}

function triggers(){
    setInterval(nextPic,500);
}

triggers() 
 <img id="myImage"/> 

Комментарии:

1. могу ли я узнать, почему мне нужно установить его в глобальную переменную? Почему использование цикла for не работает?

2. Циклы @user14811578 являются синхронными (это означает, что один блок будет немедленно выполняться за другим). Но в вашем случае вам нужна задержка 500ms . Вам нужно установить pic как глобальную переменную, потому что, если вы установите ее внутри функции, вы потеряете отслеживание текущего изображения. И вы должны объявить picCollection как глобальную переменную, чтобы предотвратить объявление одной и той же переменной снова и снова.

3. @user14811578 Если вы не понимаете, вы можете спросить.

4. ОК. Теперь понятно. очень признателен за помощь. Спасибо.

Ответ №3:

В вашем arrat нет src ключа. Вы можете просто использовать

document.getElementById("myImage").src = picCollection[i];

Комментарии:

1. Я думаю, есть и другие проблемы

2. Вы правы, но код все равно не будет работать. Код всегда будет показывать последнее изображение, а с i без let изображения не будет отображаться. Протестируйте код еще раз и попытайтесь решить все проблемы

Ответ №4:

Ваш код должен выглядеть примерно так, как показано ниже

 function nextPic(){
  var picCollection = ["./pic_bulbon.gif","./pic_bulboff.gif"];

  for(i = 0; i < picCollection.length; i  ){
    document.getElementById("myImage").src = picCollection[i];
  }
}
 

"./pic_bulbon.gif" возможно, потребуется изменить в зависимости от вашей файловой структуры и того, где вы храните gif, к которому пытаетесь получить доступ.

Если бы вы могли предоставить скриншот вашей файловой структуры, я мог бы точно сказать вам, что вам нужно

Другая проблема, с которой вы сталкиваетесь, — это попытка получить доступ picCollection[i].src

но picCollection[i] это всего лишь массив строк, а не объектов.

Комментарии:

1. При этом всегда будет отображаться последнее изображение, потому что просмотр всегда будет идти до конца. Пожалуйста, проверьте мой ответ. Также вы не должны использовать i without let в цикле. В противном случае он станет глобальной переменной

2. Я поместил его в ту же папку, что и файлы js, я думаю, местоположение не является основной проблемой