mouse.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. define("dojo/mouse", ["./_base/kernel", "./on", "./has", "./dom", "./_base/window"], function(dojo, on, has, dom, win){
  2. // module:
  3. // dojo/mouse
  4. // summary:
  5. // This module provide mouse event handling utility functions and exports
  6. // mouseenter and mouseleave event emulation.
  7. // example:
  8. // To use these events, you register a mouseenter like this:
  9. // | define(["dojo/on", dojo/mouse"], function(on, mouse){
  10. // | on(targetNode, mouse.enter, function(event){
  11. // | dojo.addClass(targetNode, "highlighted");
  12. // | });
  13. // | on(targetNode, mouse.leave, function(event){
  14. // | dojo.removeClass(targetNode, "highlighted");
  15. // | });
  16. has.add("dom-quirks", win.doc && win.doc.compatMode == "BackCompat");
  17. has.add("events-mouseenter", win.doc && "onmouseenter" in win.doc.createElement("div"));
  18. var mouseButtons;
  19. if((has("dom-quirks") && has("ie")) || !has("dom-addeventlistener")){
  20. mouseButtons = {
  21. LEFT: 1,
  22. MIDDLE: 4,
  23. RIGHT: 2,
  24. // helper functions
  25. isButton: function(e, button){ return e.button & button; },
  26. isLeft: function(e){ return e.button & 1; },
  27. isMiddle: function(e){ return e.button & 4; },
  28. isRight: function(e){ return e.button & 2; }
  29. };
  30. }else{
  31. mouseButtons = {
  32. LEFT: 0,
  33. MIDDLE: 1,
  34. RIGHT: 2,
  35. // helper functions
  36. isButton: function(e, button){ return e.button == button; },
  37. isLeft: function(e){ return e.button == 0; },
  38. isMiddle: function(e){ return e.button == 1; },
  39. isRight: function(e){ return e.button == 2; }
  40. };
  41. }
  42. dojo.mouseButtons = mouseButtons;
  43. /*=====
  44. dojo.mouseButtons = {
  45. // LEFT: Number
  46. // Numeric value of the left mouse button for the platform.
  47. LEFT: 0,
  48. // MIDDLE: Number
  49. // Numeric value of the middle mouse button for the platform.
  50. MIDDLE: 1,
  51. // RIGHT: Number
  52. // Numeric value of the right mouse button for the platform.
  53. RIGHT: 2,
  54. isButton: function(e, button){
  55. // summary:
  56. // Checks an event object for a pressed button
  57. // e: Event
  58. // Event object to examine
  59. // button: Number
  60. // The button value (example: dojo.mouseButton.LEFT)
  61. return e.button == button; // Boolean
  62. },
  63. isLeft: function(e){
  64. // summary:
  65. // Checks an event object for the pressed left button
  66. // e: Event
  67. // Event object to examine
  68. return e.button == 0; // Boolean
  69. },
  70. isMiddle: function(e){
  71. // summary:
  72. // Checks an event object for the pressed middle button
  73. // e: Event
  74. // Event object to examine
  75. return e.button == 1; // Boolean
  76. },
  77. isRight: function(e){
  78. // summary:
  79. // Checks an event object for the pressed right button
  80. // e: Event
  81. // Event object to examine
  82. return e.button == 2; // Boolean
  83. }
  84. };
  85. =====*/
  86. function eventHandler(type, mustBubble){
  87. // emulation of mouseenter/leave with mouseover/out using descendant checking
  88. var handler = function(node, listener){
  89. return on(node, type, function(evt){
  90. if(!dom.isDescendant(evt.relatedTarget, mustBubble ? evt.target : node)){
  91. return listener.call(this, evt);
  92. }
  93. });
  94. };
  95. if(!mustBubble){
  96. handler.bubble = eventHandler(type, true);
  97. }
  98. return handler;
  99. }
  100. return {
  101. _eventHandler: eventHandler, // for dojo/touch
  102. // enter: Synthetic Event
  103. // This is an extension event for the mouseenter that IE provides, emulating the
  104. // behavior on other browsers.
  105. enter: eventHandler("mouseover"),
  106. // leave: Synthetic Event
  107. // This is an extension event for the mouseleave that IE provides, emulating the
  108. // behavior on other browsers.
  109. leave: eventHandler("mouseout"),
  110. isLeft: mouseButtons.isLeft,
  111. /*=====
  112. isLeft: function(){
  113. // summary:
  114. // Test an event object (from a mousedown event) to see if the left button was pressed.
  115. },
  116. =====*/
  117. isMiddle: mouseButtons.isMiddle,
  118. /*=====
  119. isMiddle: function(){
  120. // summary:
  121. // Test an event object (from a mousedown event) to see if the middle button was pressed.
  122. },
  123. =====*/
  124. isRight: mouseButtons.isRight
  125. /*=====
  126. , isRight: function(){
  127. // summary:
  128. // Test an event object (from a mousedown event) to see if the right button was pressed.
  129. }
  130. =====*/
  131. };
  132. });