1 /** mouse handler 2 * Not instanciable. 3 *@constructor 4 */ 5 var YMouse = { 6 position: function(evt){ 7 var posi = []; 8 if ( browserIsIe ){ 9 posi[0]=evt.clientX + ((document.body)?document.body.scrollLeft:0); 10 posi[1]=evt.clientY + ((document.body)?document.body.scrollTop:0); 11 }else{ 12 posi[0]=evt.pageX; 13 posi[1]=evt.pageY; 14 }return posi; 15 }, 16 /** track mouse position 17 * @param {domElement/string} domTarget. 18 * @param {function} onMouseMove invoked when mouse moves. of type onMouseMove(Float[] position, Mixed datas); 19 * @param {mixed} [datas] returned to <b>onMouseMove</b>. 20 */ 21 onMove : function(domTarget,onMouseMove,datas){ 22 var tgt = YDom.get(domTarget); 23 if(tgt){ 24 var sobj = {onMouseMove:onMouseMove,datas:datas}; 25 YEvt.add(tgt,"mousemove",function(evt,datas){ 26 datas.onMouseMove( YMouse.position(evt) , datas.datas); 27 },sobj); 28 } 29 }, 30 onOutSince : function(domTarget,timeout,onMouseOut,datas){ 31 var obj = {omos:onMouseOut,timeout:timeout,datas:datas,tgt:YDom.get(domTarget)}; 32 YMouse.onEvent(domTarget,function(cmd,obj){ 33 if((cmd=="out"||cmd=="over")&&obj.timer){ 34 window.clearTimeout(obj.timer); 35 obj.timer=null; 36 } 37 if(cmd=="out"){ 38 obj.timer = YTimer.timeout(obj.datas.timeout,function(obj){obj.datas.omos(obj.datas.datas);},obj); 39 } 40 },obj); 41 }, 42 /** track mouse position when down 43 * @param {domElement/string} domTarget. 44 * @param {function} onMouseMove invoked when mouse moves whith button clicked down. of type onMouseMove(Float[] position,Float[] ofset, Mixed datas); 45 * @param {mixed} [datas] returned to <b>onMouseMove</b>. 46 */ 47 onMoveDown : function(domTrigger,onMouseMove,datas){ 48 YMouse.onEvent(domTrigger,function(cmd,obj){ 49 if(cmd=="movedown"){obj.onMouseMove(obj.pos,obj.ofset,obj.datas);} 50 },{onMouseMove:onMouseMove,dat:datas}); 51 }, 52 /** track mouse events 53 * @param {domElement/string} domTarget. 54 * @param {function} onMouseEvt invoked when mouse event occurs.<br/> 55 of type onMouseEvt(String eventDesc,Object obj, Mixed datas);<br/> 56 eventDesc can be : "over" "out" "down" "up" "move" "movedown" "moveup" "wheel"<br/> 57 obj is { evt , datas , pos , ofset , isdown , isover , wheel , wheelData} 58 * @param {mixed} [datas] returned to <b>onMouseEvt</b>. 59 */ 60 onEvent : function(domtrigger,onMouseEvt,datas){ 61 var domTrigger = YDom.get(domtrigger); 62 if(domTrigger){ 63 var sobj = {_onMouseEvt:onMouseEvt,isdown:false,startFrom:[0,0],datas:datas,move:[0,0],pos:[0,0],ofset:[0,0],wheel:0,wheelDelta:0,isover:false}; 64 65 66 YEvt.add(domTrigger,"mousewheel",function(evt,obj){ 67 //alert(evt.detail+" _ "+typeof(evt.detail)+evt.wheelDelta); 68 obj.evt = evt; 69 obj.wheelDelta = typeof(evt.detail)=="number" ? evt.detail/10 : evt.wheelDelta/-300; 70 obj.wheel+= obj.wheelDelta; obj._onMouseEvt("wheel", obj, obj.datas); 71 },sobj); 72 YEvt.add(domTrigger,"mouseover",function(evt,obj){ 73 obj.evt = evt; 74 obj.isover = true; obj._onMouseEvt("over", obj, obj.datas); },sobj); 75 YEvt.add(domTrigger,"mouseout",function(evt,obj){ 76 obj.evt = evt; 77 obj.isover = false; obj._onMouseEvt("out", obj, obj.datas); },sobj); 78 YEvt.add(domTrigger,"mousedown",function(evt,obj){ 79 obj.evt = evt; 80 obj.isdown = true; obj.startFrom = [obj.pos[0],obj.pos[1]]; obj._onMouseEvt("down" , obj, obj.datas); },sobj); 81 YEvt.add(domTrigger,"mouseup",function(evt,obj){ 82 obj.evt = evt; 83 obj.isdown = false; obj._onMouseEvt("up" , obj, obj.datas); },sobj); 84 YEvt.add(domTrigger,"mousemove",function(evt,obj){ 85 obj.evt = evt; 86 var pos = YMouse.position(evt); 87 obj.move = [ pos[0]-obj.pos[0] , pos[1]-obj.pos[1]]; 88 obj.pos = pos; 89 if(obj.isdown){ 90 obj.ofset = [obj.pos[0]-obj.startFrom[0],obj.pos[1]-obj.startFrom[1]]; 91 obj._onMouseEvt( "movedown" , obj, obj.datas); 92 }else obj._onMouseEvt( "moveup" , obj, obj.datas); 93 obj._onMouseEvt( "move" , obj, obj.datas); 94 },sobj); 95 return sobj; 96 } 97 } 98 }; 99 /** current global mouse posistion*/ 100 var mouseXY = [0,0]; 101 YMouse.onMove(document,function(posi,datas){ mouseXY = posi; /*document.title = "x:"+posi[0]+" y:"+posi[1]+" |"+YKeys;*/ }); 102 /** current global mouse buttons L,centre,R,?,?(some more)*/ 103 var mouseButtons=[false,false,false,false,false]; 104 YEvt.add(document,"mousedown",function(evt,obj){mouseButtons[evt.which-1]=true; },null); 105 YEvt.add(document,"mouseup",function(evt,obj){ mouseButtons[evt.which-1]=false; },null); 106