-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathion-ripple.js
73 lines (59 loc) · 2.03 KB
/
ion-ripple.js
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
64
65
66
67
68
69
70
71
72
73
(function() {
'use strict';
angular
.module('ionMDRipple', ['ionic'])
.directive('ionRipple', ionRipple);
function ionRipple() {
return {
restrict: 'A',
link: link,
scope: {
ionRippleColor: '@'
}
};
function link(scope, element, attr) {
var x;
var y;
var size;
var offsets;
var rippleClass = 'ion-ripple';
var animateClassName = 'ion-ripple_animate';
var ripple = document.createElement('span');
// Use color from ion-ripple-color attribute if possible.
if (attr.ionRippleColor) {
ripple.style.backgroundColor = attr.ionRippleColor;
}
ripple.classList.add(rippleClass);
element[0].insertBefore(ripple, element[0].firstChild);
element.on('click', rippleHandler);
angular.element(ripple).on('animationend webkitAnimationEnd', deactivateRipple);
//remove the event listener on scope destroy
scope.$on('$destroy', function() {
element.off('click', rippleHandler);
angular.element(ripple).off('animationend webkitAnimationEnd', deactivateRipple);
});
function deactivateRipple() {
ripple.classList.remove(animateClassName);
}
function rippleHandler(event) {
if (!ripple.offsetHeight && !ripple.offsetWidth) {
size = Math.max(element[0].offsetWidth, element[0].offsetHeight);
ripple.style.width = ripple.style.height = size + 'px';
}
x = event.pageX;
y = event.pageY;
function getPos(element) {
var de = document.documentElement;
var box = element.getBoundingClientRect();
var top = box.top + pageYOffset - de.clientTop;
var left = box.left + pageXOffset - de.clientLeft;
return { top: top, left: left };
}
offsets = getPos(element[0]);
ripple.style.top = (y - offsets.top - size / 2) + 'px';
ripple.style.left = (x - offsets.left - size / 2) + 'px';
ripple.classList.add(animateClassName);
}
}
}
})();