Javascript オブジェクトの作成と、setTimeout を使用したそのオブジェクト内でのメソッドの呼び出しに問題があります。さまざまな回避策を試しましたが、常にループの 2 番目の部分でスコープがカスタム オブジェクトではなくウィンドウ オブジェクトになります。警告: 私は JavaScript が初めてです。
私のコード:
$(function() {
slide1 = Object.create(slideItem);
slide1.setDivs($('#SpotSlideArea'));
slide1.loc = 'getSpot';
slide2 = Object.create(slideItem);
slide2.setDivs($('#ProgSlideArea'));
slide2.loc = 'getProg';
slide2.slide = 1;
setTimeout('triggerSlide(slide1)', slide1.wait);
setTimeout('triggerSlide(slide2)', slide2.wait);
});
function triggerSlide(slideObject) {
slideObject.changeSlide(slideObject);
}
var slideItem = {
div1: null,
div2: null,
slide: 0,
wait: 15000,
time: 1500,
loc: null,
changeSlide: function(self) {
this.slide ? curDiv = this.div1:curDiv = this.div2;
$(curDiv).load(location.pathname + "/" + this.loc, this.slideGo(self));
},
setDivs: function(div) {
var subDivs = $(div).children();
this.div1 = subDivs[0];
this.div2 = subDivs[1];
},
slideGo: function(self) {
if(this.slide) {
$(this.div2).animate({
marginLeft: "-300px"
}, this.time);
$(this.div1).animate({
marginLeft: "0"
}, this.time);
setTimeout('triggerSlide(self)', this.wait);
} else {
$(this.div1).animate({
marginLeft: "300px"
}, this.time);
$(this.div2).animate({
marginLeft: "0"
}, this.time);
setTimeout('triggerSlide(self)', this.wait);
}
this.slide ? this.slide=0:this.slide=1;
}
}
私の最近の試みは、ヘルパー関数 triggerSlide を作成して、メソッドを介してオブジェクトへの参照を渡そうとすることでしたが、それでもうまくいかないようです。
setInterval を使用できますが、機能します。
- タイマーが再起動する前にアニメーションが完了していることを確認したい
- そのように問題を回避する方法を学びません。:)