cdf
Version:
A library for creating oldschool demo-like animations with JavaScript
86 lines (71 loc) • 2.46 kB
JavaScript
(function (global) {
var lib = global.cdf || {};
var MouseTracker = lib.MouseTracker = function () {
this.canvas_list = [];
};
var outState = function(){return { x:-1, y:-1, button: 0, buttons: 0 }};
var mouseObj = function(mouse){
return {
x:mouse.x,
y:mouse.y,
button:mouse.button,
buttons:mouse.buttons
}
};
MouseTracker.prototype = {
addMouseTrack: function (canvas, preserveContextMenu, removeDrag) {
var instance = this;
this.buttons = 0;
this.canvas_list.push(canvas);
canvas.cursor = {x:0,y:0};
canvas.canvas.mouse = canvas.mouse = canvas.canvas.prevMouse = outState();
var mouseOut = function () {
this.prevMouse = this.mouse; this.mouse = outState();
};
var mouseDown = function (ev) {
this.mouse.button = ev.which;
this.mouse.buttons = ev.buttons;
if(removeDrag){
ev.preventDefault();
return false;
}
};
var mouseUp = function(ev){
this.mouse.button = 0;
this.mouse.buttons = ev.buttons;
};
var mouseMove = function (ev) {
var rect = this.getBoundingClientRect();
this.mouse.x = Math.round(ev.clientX - rect.left);
this.mouse.y = Math.round(ev.clientY - rect.top)
};
canvas.canvas.addEventListener('mouseout', mouseOut , false);
canvas.canvas.addEventListener('mousedown', mouseDown, false);
canvas.canvas.addEventListener('mouseup', mouseUp, false);
canvas.canvas.addEventListener('mousemove', mouseMove, false);
if (!preserveContextMenu)
canvas.canvas.addEventListener('contextmenu', function (e) {
if (e.button === 2) {
e.preventDefault();
return false;
}
}, false);
if(removeDrag){
canvas.canvas.setAttribute('draggable','false');
canvas.canvas.style['user-drag'] = 'none';
canvas.canvas.style['-webkit-user-drag'] = 'none';
canvas.canvas.style['-moz-user-drag'] = 'none';
canvas.canvas.style['-ms-user-drag'] = 'none';
}
return this;
},
update: function () {
this.canvas_list.forEach(function(c){
var prevMouse = mouseObj(c.mouse);
c.mouse = mouseObj(c.element.mouse);;
c.mouse.prev = prevMouse;
});
}
};
if(typeof module!=='undefined'&& module.exports){module.exports=lib;}else{global.cdf=lib;}
})(window);