0
내 클래스를 사용하여 마우스 수신기를 만드는 데 문제가 있습니다. 먼저 클래스 (new mouseEventManager())를 만든 다음 init() 함수를 호출하여 zoomHandler 함수를 설정합니다. 화면의 크기를 적절하게 조정하려면 클래스의 scale_level 변수를 사용해야합니다. 그러나 scale_level은 NaN (숫자가 아님)이라고합니다. 여기 클래스 내에서 생성 된 자바 스크립트 마우스 이벤트 리스너
코드입니다 :function mouseEventManager() {
this.designManager;
this.canvasManager;
this.scale_level;
this.init = function(designManager, canvasManager) {
this.designManager = designManager;
this.canvasManager = canvasManager;
this.scale_level = 1; alert(this.scale_level);
var designManager = this.designManager;
//general mousemove listener
$(document).mousemove(function(e){
designManager.HAND_X = e.pageX;
designManager.HAND_Y = e.pageY;
});
//create scroll wheel listener
if(window.addEventListener) { document.addEventListener('DOMMouseScroll', this.zoomHandler, false); }
document.onmousewheel = this.zoomHandler;
}
this.zoomHandler = function() {
var delta = 0;
if (!event) event = window.event;
// normalize the delta
if (event.wheelDelta) {
// IE and Opera
delta = event.wheelDelta/60;
} else if (event.detail) {
// W3C
delta = -event.detail/2;
}
if (delta > 0) {
//scroll wheel up
this.scale_level = this.scale_level * 1.25; alert(this.scale_level);
this.canvasManager.mainLayer.setScale(this.scale_level);
this.canvasManager.mainLayer.draw();
} else if (delta < 0) {
//scroll wheel down
this.scale_level = this.scale_level * 0.8;
this.canvasManager.mainLayer.setScale(this.scale_level);
this.canvasManager.mainLayer.draw();
}
alert(delta);
}
}
그것은 zoomHandler 내 모양의 mouseEventManager의 내부 구성원 중 어느 것도 정의되지 않습니다. 그래서 변수 스콥이나 뭔가 관련해서 뭔가 잘못하고 있다고 생각합니다.
도움 주셔서 감사합니다.
여기서 'var manager = this'를 (mouseEventManager의 첫 번째 레벨 내에서) 선언 할 수 있습니까? – JDS
Err ok 나는 그게 효과가 있다는 것을 알았다. 감사합니다 – JDS
이렇게하면 별도의 변수에'this'의 값이 보존됩니다. 문제는 이벤트 핸들러에 대한 함수 호출이 'this'를 다른 것으로 설정한다는 것입니다. – Pointy