#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, я думаю, местоположение не является основной проблемой