I’m having issues using my class to create a mouse listener. First I create the class (new mouseEventManager()), then I call the init() function, which I want to set up my zoomHandler function. It must use the class’ variable scale_level in order to appropriately scale the screen. However I’m told that scale_level is NaN (not a number).
Here is the code:
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);
}
}
It looks like within zoomHandler, none of the mouseEventManager’s internal members are defined. So I think I’m doing something wrong with variable scoping or something related.
Thank you for any help.
The problem is that
thisin your handler won’t be what you need it to be when the handler is actually invoked.Try changing things as follows:
then where you use
thisin the function, instead usemanager, the “saved” reference to the object.