객체 내에서 생성된 노드, 노드에 걸린 이벤트, 객체 내의 setInterval 함수 전부 객체 내에서 제대로 된 scope를 참조하고자 할 때 아래와 같은 방법을 사용함.
setInterval로 지정된 시간마다 이미지를 바꾸고,
이미지에는 onmouseover, omouseout 이벤트를 걸고,
bNeedStop 이라는 변수를 this. 로 공유하는 형태.
var rollingBanner = function(oContainer) {
this.oContainer = oContainer;
this.oImg = document.createElement("img");
this.aImg = new Array();
this.iCurrentIndex = 0;
// 이 변수를 공유하기 위하여...
this.bNeedStop = false;
if (this.oContainer) {
this.oContainer.appendChild(this.oImg);
// 제대로 된 scope를 위한 처리
var t = this;
this.oImg.onmouseover = function() { t.stopRolling(); };
this.oImg.onmouseout = function() { t.resumeRolling(); };
}
this.addImg = function(sSrc) {
this.aImg.push(sSrc);
};
this.setNextImg = function() {
if (this.bNeedStop) return;
if (this.iCurrentIndex>=this.aImg.length) this.iCurrentIndex = 0;
this.oImg.src = this.aImg[this.iCurrentIndex++];
};
this.stopRolling = function() {
this.bNeedStop = true;
};
this.resumeRolling = function() {
this.bNeedStop = false;
};
this.start = function(iInterval) {
this.setNextImg();
// 제대로 된 scope를 위한 처리
var t = this;
setInterval(function() {t.setNextImg(); }, iInterval);
};
};
'JavaScript' 카테고리의 다른 글
[JavaScript] 객체 상속 (0) | 2010.01.05 |
---|---|
[JavaScript] 정적 클래스, 동적 클래스 (0) | 2010.01.04 |
[JavaScript] 함수 인자 전달시 변수 범위 (0) | 2009.12.31 |
[JavaScript] 시간 맞춰 돌아가는 롤링배너 (Rolling Banner) (0) | 2009.12.31 |
[JavaScript] new line(\n)을 포함한 패턴매칭 (0) | 2009.12.29 |