Я пытаюсь создать слайд-шоу, где я загружаю следующий слайд перед выполнением текущего. Для этого у меня есть два прототипа. Один для показа текущего слайда, а затем один для загрузки следующего слайда.переменная установлена в undefined в функции
Он работал нормально, пока я не поставил setTimeout()
за задержку между слайдами. Функция NextSlide()
вызывает себя после setTimeout()
, однако this.nextSlide
не определен, даже если он загружен и успешно добавлен в this.nextSlide
в LoadNextSlide()
.
$(document).ready(function(){
//Set width and height of canvas
var width = $(document).width();
var height = $(document).height();
$("#MKslide").css({"width":width+"px","height":height+"px"});
slideShow = new SlideShow(width, height, "2d");
slideShow.LoadNextSlide(null);
slideShow.NextSlide();
});
function SlideShow(canvasWidth, canvasHeight, dimension){
//Creating the slideshow
}
SlideShow.prototype.LoadNextSlide = function(currentSlideNumber){
var data = $.parseJSON($.ajax({
type: "POST",
url: "/cms/php/request.php",
dataType: "json",
data: {slideNumber : currentSlideNumber},
async: false
}).responseText);
this.nextSlide = data;
alert(this.nextSlide.id);
}
SlideShow.prototype.NextSlide = function(){
alert(this.nextSlide.id);
this.currentSlide = this.nextSlide; //Swap to next slide.
if(beginsWithHTTP(this.currentSlide.data)){
this.image.src = this.currentSlide.data;
}
else{
this.image.src = "http://" + this.currentSlide.data; //Set the current slide.
}
this.LoadNextSlide(this.currentSlide.id); //Preload next slide
window.setTimeout(this.NextSlide,this.currentSlide.duration * 1000);//wait x seconds before swapping
}