hover.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * DevExtreme (events/hover.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var eventsEngine = require("../events/core/events_engine");
  11. var dataUtils = require("../core/element_data");
  12. var Class = require("../core/class");
  13. var devices = require("../core/devices");
  14. var registerEvent = require("./core/event_registrator");
  15. var eventUtils = require("./utils");
  16. var pointerEvents = require("./pointer");
  17. var HOVERSTART_NAMESPACE = "dxHoverStart";
  18. var HOVERSTART = "dxhoverstart";
  19. var POINTERENTER_NAMESPACED_EVENT_NAME = eventUtils.addNamespace(pointerEvents.enter, HOVERSTART_NAMESPACE);
  20. var HOVEREND_NAMESPACE = "dxHoverEnd";
  21. var HOVEREND = "dxhoverend";
  22. var POINTERLEAVE_NAMESPACED_EVENT_NAME = eventUtils.addNamespace(pointerEvents.leave, HOVEREND_NAMESPACE);
  23. var Hover = Class.inherit({
  24. noBubble: true,
  25. ctor: function() {
  26. this._handlerArrayKeyPath = this._eventNamespace + "_HandlerStore"
  27. },
  28. setup: function(element) {
  29. dataUtils.data(element, this._handlerArrayKeyPath, {})
  30. },
  31. add: function(element, handleObj) {
  32. var that = this;
  33. var handler = function(e) {
  34. that._handler(e)
  35. };
  36. eventsEngine.on(element, this._originalEventName, handleObj.selector, handler);
  37. dataUtils.data(element, this._handlerArrayKeyPath)[handleObj.guid] = handler
  38. },
  39. _handler: function(e) {
  40. if (eventUtils.isTouchEvent(e) || devices.isSimulator()) {
  41. return
  42. }
  43. eventUtils.fireEvent({
  44. type: this._eventName,
  45. originalEvent: e,
  46. delegateTarget: e.delegateTarget
  47. })
  48. },
  49. remove: function(element, handleObj) {
  50. var handler = dataUtils.data(element, this._handlerArrayKeyPath)[handleObj.guid];
  51. eventsEngine.off(element, this._originalEventName, handleObj.selector, handler)
  52. },
  53. teardown: function(element) {
  54. dataUtils.removeData(element, this._handlerArrayKeyPath)
  55. }
  56. });
  57. var HoverStart = Hover.inherit({
  58. ctor: function() {
  59. this._eventNamespace = HOVERSTART_NAMESPACE;
  60. this._eventName = HOVERSTART;
  61. this._originalEventName = POINTERENTER_NAMESPACED_EVENT_NAME;
  62. this.callBase()
  63. },
  64. _handler: function(e) {
  65. var pointers = e.pointers || [];
  66. if (!pointers.length) {
  67. this.callBase(e)
  68. }
  69. }
  70. });
  71. var HoverEnd = Hover.inherit({
  72. ctor: function() {
  73. this._eventNamespace = HOVEREND_NAMESPACE;
  74. this._eventName = HOVEREND;
  75. this._originalEventName = POINTERLEAVE_NAMESPACED_EVENT_NAME;
  76. this.callBase()
  77. }
  78. });
  79. registerEvent(HOVERSTART, new HoverStart);
  80. registerEvent(HOVEREND, new HoverEnd);
  81. exports.start = HOVERSTART;
  82. exports.end = HOVEREND;