Javascript 객체를 작성하고 setTimeout을 사용하여 해당 객체에서 메서드를 호출하는 데 문제가 있습니다. 다양한 해결 방법을 시도했지만 항상 루프의 두 번째 부분에서 범위가 내 사용자 지정 개체가 아닌 창 개체가됩니다. 경고 : 저는 자바 스크립트에서 꽤 새로 왔습니다.setTimeout을 사용하는 메서드가 범위를 잃습니다.
내 코드 :
내 방법을 통해 개체에 대한 참조를 전달하려고 시도 할 수 있지만, 심지어는 작동하지 않도록 내 최신 시도가 도우미 함수 triggerSlide를 구축했다$(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;
}
}
.
나는 setInterval을 사용할 수 있으며 그러나, 작동 : 타이머가 나는 문제를 해결하는 방법을 얻는 방법을 배울 수 없습니다
- 나는 완료 애니메이션을 보장합니다. :)
문자열에서 +1 코드는 절대적으로 필요하지 않는 한 일반적으로 피해야합니다. 여기에는'new function ('some code');,'setTimeout ("doSomething()", 0); 그리고 모두가 좋아하는'eval ('some code');가 포함됩니다. 첫 번째 두 가지는 필자에게 * 절대 * JSON 및 입력 수학 표현에 대한 필요성을 보지 못했습니다 :-) –
위의 시도한 및 초기 호출에 대해 작동하지만 호출 작업을 반복합니다 (slideGo()의 setTimeout() 호출은 여전히 작동하지 않습니다. 위와 같이 포맷했지만 위의 slideItem 대신이 형식을 사용합니다. 즉 setTimeout (function() {this.changeSlide();}, this.wait); Firebug에서 this.changeSlide()가 함수가 아닙니다. slideGo 메서드에서 'this'가 내 slideItem을 참조하고 있지만 두 번째 setTimeout 호출이 발생할 때 나타나지 않습니다. –
나는 slide.Go 메서드의 시작 부분에 this = this를 추가하려고했음을 언급해야합니다. 그러나 메서드 내에서만이 아니라 전역 범위에 추가되는 것처럼 보입니다. 페이지를 만들면 그것들은 각 setTimeout에 의해 트리거되어 움직입니다. –