2016-07-06 3 views
-2

У меня возникли проблемы с работой этого слайд-шоу. Я должен сделать внешний файл Javascript. Я очень смущен, потому что я не очень хорошо знаю js. Любая помощь будет оценена.Uncaught TypeError: Не удается установить свойство 'src' неопределенного слайд-шоу

var numImages = 3; 
 
var images = []; 
 
for (var i = 0; i < numImages; ++i) { 
 
    var image = new Image(); 
 
    image.src = 'baby' + (i + 1) + '.jpg'; 
 
    images.push(image); 
 
} 
 

 
var step = 0; 
 
function slideit() { 
 
    if (! document.images) { 
 
     return; 
 
    } 
 
    document.images.slide.src = images[step].src; 
 
    step = (step + 1) % numImages; 
 
} 
 
setInterval(slideit, 2500);

+1

1. Есть ли 'img' элемент на странице с' ид = "горкой" '? 2. Выполняется ли JS _after_ полностью анализируется документ? – Siguza

+0

Теперь. И JS работает после анализа документа. Он работает сейчас. Спасибо. –

ответ

3

разве это где-то в вашем HTML ...

<img id="slide"> 

Тогда это будет в undefined ...

document.images.slide 

Поэтому ...

document.images.slide.src = ... 

Объясняет ...

Uncaught TypeError: Cannot set property 'src' of undefined 

Вот упрощенный фрагмент кода, который вы можете запустить и увидеть его работу

var images = [ 
 
    'http://placehold.it/200?text=A', 
 
    'http://placehold.it/200?text=B', 
 
    'http://placehold.it/200?text=C' 
 
] 
 

 
function slideIt(elem, i, images) { 
 
    elem.src = images[i % images.length] 
 
    setTimeout(slideIt, 1000, elem, i+1, images) 
 
} 
 

 
slideIt(document.querySelector('#slideshow'), 0, images)
<img id="slideshow">


В исходном коде вы предварительно загрузили изображения. Ниже я сделал небольшую адаптацию для предварительной загрузки изображений перед инициализацией слайдера.

var images = [ 
 
    'http://placehold.it/200?text=A', 
 
    'http://placehold.it/200?text=B', 
 
    'http://placehold.it/200?text=C' 
 
] 
 

 
function slideIt(elem, i, images) { 
 
    elem.src = images[i % images.length].src 
 
    setTimeout(slideIt, 1000, elem, i+1, images) 
 
} 
 

 
function imagep(src) { 
 
    return new Promise(function(pass,fail) { 
 
    var i = new Image() 
 
    i.src = src 
 
    i.onload = function(event) { pass(i) } 
 
    }) 
 
} 
 

 
Promise.all(images.map(imagep)).then(function(imgs) { 
 
    slideIt(document.querySelector('#slideshow'), 0, imgs) 
 
})
<img id="slideshow">

+0

Спасибо. Это сработало! Я искал и искал, но ничего не мог найти. Так просто. –

+0

Добро пожаловать. Рад был помочь. – naomik

Смежные вопросы