item-sliding-gesture.js 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import { GESTURE_ITEM_SWIPE, GESTURE_PRIORITY_SLIDING_ITEM } from '../../gestures/gesture-controller';
  2. import { PanGesture } from '../../gestures/pan-gesture';
  3. import { pointerCoord } from '../../util/dom';
  4. /**
  5. * @hidden
  6. */
  7. export class ItemSlidingGesture extends PanGesture {
  8. constructor(plt, list, gestureCtrl, domCtrl) {
  9. super(plt, list.getNativeElement(), {
  10. maxAngle: 20,
  11. threshold: 5,
  12. zone: false,
  13. domController: domCtrl,
  14. gesture: gestureCtrl.createGesture({
  15. name: GESTURE_ITEM_SWIPE,
  16. priority: GESTURE_PRIORITY_SLIDING_ITEM,
  17. disableScroll: true
  18. })
  19. });
  20. this.list = list;
  21. this.preSelectedContainer = null;
  22. this.selectedContainer = null;
  23. this.openContainer = null;
  24. }
  25. canStart(ev) {
  26. if (this.selectedContainer) {
  27. return false;
  28. }
  29. // Get swiped sliding container
  30. let container = getContainer(ev);
  31. if (!container) {
  32. this.closeOpened();
  33. return false;
  34. }
  35. // Close open container if it is not the selected one.
  36. if (container !== this.openContainer) {
  37. this.closeOpened();
  38. }
  39. let coord = pointerCoord(ev);
  40. this.preSelectedContainer = container;
  41. this.firstCoordX = coord.x;
  42. this.firstTimestamp = Date.now();
  43. return true;
  44. }
  45. onDragStart(ev) {
  46. ev.preventDefault();
  47. let coord = pointerCoord(ev);
  48. this.selectedContainer = this.openContainer = this.preSelectedContainer;
  49. this.selectedContainer.startSliding(coord.x);
  50. }
  51. onDragMove(ev) {
  52. ev.preventDefault();
  53. this.selectedContainer.moveSliding(pointerCoord(ev).x);
  54. }
  55. onDragEnd(ev) {
  56. ev.preventDefault();
  57. let coordX = pointerCoord(ev).x;
  58. let deltaX = (coordX - this.firstCoordX);
  59. let deltaT = (Date.now() - this.firstTimestamp);
  60. this.selectedContainer.endSliding(deltaX / deltaT);
  61. this.selectedContainer = null;
  62. this.preSelectedContainer = null;
  63. }
  64. notCaptured(ev) {
  65. if (!clickedOptionButton(ev)) {
  66. this.closeOpened();
  67. }
  68. }
  69. closeOpened() {
  70. this.selectedContainer = null;
  71. if (this.openContainer) {
  72. this.openContainer.close();
  73. this.openContainer = null;
  74. return true;
  75. }
  76. return false;
  77. }
  78. destroy() {
  79. super.destroy();
  80. this.closeOpened();
  81. this.list = null;
  82. this.preSelectedContainer = null;
  83. this.selectedContainer = null;
  84. this.openContainer = null;
  85. }
  86. }
  87. function getContainer(ev) {
  88. let ele = ev.target.closest('ion-item-sliding');
  89. if (ele) {
  90. return ele['$ionComponent'];
  91. }
  92. return null;
  93. }
  94. function clickedOptionButton(ev) {
  95. let ele = ev.target.closest('ion-item-options>button');
  96. return !!ele;
  97. }
  98. //# sourceMappingURL=item-sliding-gesture.js.map