hold.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /**
  2. * DevExtreme (events/hold.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 eventUtils = require("./utils");
  11. var Emitter = require("./core/emitter");
  12. var registerEmitter = require("./core/emitter_registrator");
  13. var abs = Math.abs;
  14. var HOLD_EVENT_NAME = "dxhold";
  15. var HOLD_TIMEOUT = 750;
  16. var TOUCH_BOUNDARY = 5;
  17. var HoldEmitter = Emitter.inherit({
  18. start: function(e) {
  19. this._startEventData = eventUtils.eventData(e);
  20. this._startTimer(e)
  21. },
  22. _startTimer: function(e) {
  23. var holdTimeout = "timeout" in this ? this.timeout : HOLD_TIMEOUT;
  24. this._holdTimer = setTimeout(function() {
  25. this._requestAccept(e);
  26. this._fireEvent(HOLD_EVENT_NAME, e, {
  27. target: e.target
  28. });
  29. this._forgetAccept()
  30. }.bind(this), holdTimeout)
  31. },
  32. move: function(e) {
  33. if (this._touchWasMoved(e)) {
  34. this._cancel(e)
  35. }
  36. },
  37. _touchWasMoved: function(e) {
  38. var delta = eventUtils.eventDelta(this._startEventData, eventUtils.eventData(e));
  39. return abs(delta.x) > TOUCH_BOUNDARY || abs(delta.y) > TOUCH_BOUNDARY
  40. },
  41. end: function() {
  42. this._stopTimer()
  43. },
  44. _stopTimer: function() {
  45. clearTimeout(this._holdTimer)
  46. },
  47. cancel: function() {
  48. this._stopTimer()
  49. },
  50. dispose: function() {
  51. this._stopTimer()
  52. }
  53. });
  54. registerEmitter({
  55. emitter: HoldEmitter,
  56. bubble: true,
  57. events: [HOLD_EVENT_NAME]
  58. });
  59. module.exports = {
  60. name: HOLD_EVENT_NAME
  61. };