Cancel any pending animations on quick movements
Browse files- src/common/constants.js +1 -1
- src/core/element.js +9 -4
src/common/constants.js
CHANGED
@@ -10,7 +10,7 @@ export const ID_OVERLAY = 'driver-page-overlay';
|
|
10 |
export const ID_STAGE = 'driver-highlighted-element-stage';
|
11 |
export const ID_POPOVER = 'driver-popover-item';
|
12 |
|
13 |
-
export const
|
14 |
|
15 |
export const CLASS_POPOVER_TIP = 'driver-popover-tip';
|
16 |
export const CLASS_POPOVER_TITLE = 'driver-popover-title';
|
|
|
10 |
export const ID_STAGE = 'driver-highlighted-element-stage';
|
11 |
export const ID_POPOVER = 'driver-popover-item';
|
12 |
|
13 |
+
export const CLASS_DRIVER_HIGHLIGHTED_ELEMENT = 'driver-highlighted-element';
|
14 |
|
15 |
export const CLASS_POPOVER_TIP = 'driver-popover-tip';
|
16 |
export const CLASS_POPOVER_TITLE = 'driver-popover-title';
|
src/core/element.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
import Position from './position';
|
2 |
-
import { ANIMATION_DURATION_MS,
|
3 |
|
4 |
/**
|
5 |
* Wrapper around DOMElements to enrich them
|
@@ -23,6 +23,8 @@ export default class Element {
|
|
23 |
this.overlay = overlay;
|
24 |
this.popover = popover;
|
25 |
|
|
|
|
|
26 |
this.highlightFinished = false; // To track when the element has fully highlighted
|
27 |
}
|
28 |
|
@@ -140,7 +142,10 @@ export default class Element {
|
|
140 |
onDeselected() {
|
141 |
this.hidePopover();
|
142 |
|
143 |
-
this.node.classList.remove(
|
|
|
|
|
|
|
144 |
|
145 |
this.highlightFinished = false;
|
146 |
|
@@ -170,7 +175,7 @@ export default class Element {
|
|
170 |
onHighlighted() {
|
171 |
this.showPopover();
|
172 |
|
173 |
-
this.node.classList.add(
|
174 |
|
175 |
this.highlightFinished = true;
|
176 |
|
@@ -228,7 +233,7 @@ export default class Element {
|
|
228 |
// For first highlight, show it immediately because there won't be any animation
|
229 |
const animationDuration = !this.overlay.lastHighlightedElement ? 0 : ANIMATION_DURATION_MS * 2;
|
230 |
|
231 |
-
window.setTimeout(() => {
|
232 |
this.popover.show(showAtPosition);
|
233 |
}, animationDuration);
|
234 |
}
|
|
|
1 |
import Position from './position';
|
2 |
+
import { ANIMATION_DURATION_MS, CLASS_DRIVER_HIGHLIGHTED_ELEMENT } from '../common/constants';
|
3 |
|
4 |
/**
|
5 |
* Wrapper around DOMElements to enrich them
|
|
|
23 |
this.overlay = overlay;
|
24 |
this.popover = popover;
|
25 |
|
26 |
+
this.animationTimeout = null;
|
27 |
+
|
28 |
this.highlightFinished = false; // To track when the element has fully highlighted
|
29 |
}
|
30 |
|
|
|
142 |
onDeselected() {
|
143 |
this.hidePopover();
|
144 |
|
145 |
+
this.node.classList.remove(CLASS_DRIVER_HIGHLIGHTED_ELEMENT);
|
146 |
+
|
147 |
+
// If there was any animation in progress, cancel that
|
148 |
+
this.window.clearTimeout(this.animationTimeout);
|
149 |
|
150 |
this.highlightFinished = false;
|
151 |
|
|
|
175 |
onHighlighted() {
|
176 |
this.showPopover();
|
177 |
|
178 |
+
this.node.classList.add(CLASS_DRIVER_HIGHLIGHTED_ELEMENT);
|
179 |
|
180 |
this.highlightFinished = true;
|
181 |
|
|
|
233 |
// For first highlight, show it immediately because there won't be any animation
|
234 |
const animationDuration = !this.overlay.lastHighlightedElement ? 0 : ANIMATION_DURATION_MS * 2;
|
235 |
|
236 |
+
this.animationTimeout = this.window.setTimeout(() => {
|
237 |
this.popover.show(showAtPosition);
|
238 |
}, animationDuration);
|
239 |
}
|