touch.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /**
  2. * DevExtreme (events/pointer/touch.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 devices = require("../../core/devices");
  11. var extend = require("../../core/utils/extend").extend;
  12. var each = require("../../core/utils/iterator").each;
  13. var BaseStrategy = require("./base");
  14. var eventMap = {
  15. dxpointerdown: "touchstart",
  16. dxpointermove: "touchmove",
  17. dxpointerup: "touchend",
  18. dxpointercancel: "touchcancel",
  19. dxpointerover: "",
  20. dxpointerout: "",
  21. dxpointerenter: "",
  22. dxpointerleave: ""
  23. };
  24. var normalizeTouchEvent = function(e) {
  25. var pointers = [];
  26. each(e.touches, function(_, touch) {
  27. pointers.push(extend({
  28. pointerId: touch.identifier
  29. }, touch))
  30. });
  31. return {
  32. pointers: pointers,
  33. pointerId: e.changedTouches[0].identifier
  34. }
  35. };
  36. var skipTouchWithSameIdentifier = function(pointerEvent) {
  37. return "ios" === devices.real().platform && ("dxpointerdown" === pointerEvent || "dxpointerup" === pointerEvent)
  38. };
  39. var TouchStrategy = BaseStrategy.inherit({
  40. ctor: function() {
  41. this.callBase.apply(this, arguments);
  42. this._pointerId = 0
  43. },
  44. _handler: function(e) {
  45. if (skipTouchWithSameIdentifier(this._eventName)) {
  46. var touch = e.changedTouches[0];
  47. if (this._pointerId === touch.identifier && 0 !== this._pointerId) {
  48. return
  49. }
  50. this._pointerId = touch.identifier
  51. }
  52. return this.callBase.apply(this, arguments)
  53. },
  54. _fireEvent: function(args) {
  55. return this.callBase(extend(normalizeTouchEvent(args.originalEvent), args))
  56. }
  57. });
  58. TouchStrategy.map = eventMap;
  59. TouchStrategy.normalize = normalizeTouchEvent;
  60. module.exports = TouchStrategy;