-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeedback-animation.js
More file actions
63 lines (52 loc) · 2.06 KB
/
feedback-animation.js
File metadata and controls
63 lines (52 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import { DATA_RIPPLE_SIZE } from './constants.js';
const animateElementRipple = (element, color) => {
element.addEventListener('mousedown', e => {
// Check if pressing the primary button
if (e.button === 0) {
let mouseUp = false;
const mouseUpListener = document.onmouseup = () => {
mouseUp = true;
element.removeEventListener('mouseup', mouseUpListener);
}
const tempBoundingRect = element.getBoundingClientRect();
const x = e.pageX - tempBoundingRect.left;
const y = e.pageY - tempBoundingRect.top;
// const x = e.pageX - element.offsetLeft;
// const y = e.pageY - element.offsetTop;
const w = element.offsetWidth * DATA_RIPPLE_SIZE;
const ripple = document.createElement('span');
ripple.className = 'ripple';
ripple.style.left = x + 'px';
ripple.style.top = y + 'px';
ripple.style.setProperty('--scale', w);
if (element.dataset.itsFeedbackColor) {
console.log(element.dataset.itsFeedbackColor);
ripple.style.setProperty('--color', color);
}
element.prepend(ripple);
setTimeout(() => {
if (mouseUp) {
ripple.parentNode.removeChild(ripple);
} else {
const mouseUpListener = document.onmouseup = () => {
if (ripple) {
ripple && ripple.parentNode.removeChild(ripple);
}
element.removeEventListener('mouseup', mouseUpListener);
}
}
}, 300);
}
});
}
const feedbackAnimation = (element) => {
if (element) {
switch (element.dataset.itsFeedbackAnimation) {
case 'ripple':
animateElementRipple(element, element.dataset.itsFeedbackColor);
default:
return;
}
}
}
export default feedbackAnimation;