-
Notifications
You must be signed in to change notification settings - Fork 49
/
Copy pathanim-in-out.js
88 lines (68 loc) · 3.97 KB
/
anim-in-out.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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
(function() {
'use strict';
var module = angular.module('hj.animInOut', ['ngAnimate']);
angular.module('anim-in-out', ['hj.animInOut']);
module.animation('.anim-in-out', ['$rootScope', '$timeout', '$window',
function($rootScope, $timeout, $window) {
return {
enter: function(element, done) {
var sync = $rootScope.$eval(angular.element(element).attr('data-anim-sync')) !== undefined ? $rootScope.$eval(angular.element(element).attr('data-anim-sync')) : false,
speed = angular.element(element).attr('data-anim-speed') !== undefined ? $rootScope.$eval(angular.element(element).attr('data-anim-speed')) : 1000,
inSpeed = angular.element(element).attr('data-anim-in-speed') !== undefined ? $rootScope.$eval(angular.element(element).attr('data-anim-in-speed')) : speed,
outSpeed = angular.element(element).attr('data-anim-out-speed') !== undefined ? $rootScope.$eval(angular.element(element).attr('data-anim-out-speed')) : speed;
try {
var observer = new MutationObserver(function(mutations) {
observer.disconnect();
$window.requestAnimationFrame(function() {
$timeout(done, sync ? 0 : outSpeed);
});
});
observer.observe(element[0], {
attributes: true,
childList: false,
characterData: false
});
} catch (e) {
$timeout(done, Math.max(100, sync ? 0 : outSpeed));
}
angular.element(element).addClass('anim-in-setup');
return function(cancelled) {
angular.element(element).removeClass('anim-in-setup');
angular.element(element).addClass('anim-in');
if (!cancelled) {
$timeout(function() {
$rootScope.$broadcast('animEnd', element, inSpeed);
angular.element(element).removeClass('anim-in');
}, inSpeed);
}
};
},
leave: function(element, done) {
var speed = angular.element(element).attr('data-anim-speed') !== undefined ? $rootScope.$eval(angular.element(element).attr('data-anim-speed')) : 1000,
outSpeed = angular.element(element).attr('data-anim-out-speed') !== undefined ? $rootScope.$eval(angular.element(element).attr('data-anim-out-speed')) : speed;
$rootScope.$broadcast('animStart', element, outSpeed);
try {
var observer = new MutationObserver(function(mutations) {
observer.disconnect();
$window.requestAnimationFrame(function() {
angular.element(element).removeClass('anim-out-setup');
angular.element(element).addClass('anim-out');
$timeout(done, outSpeed);
});
});
observer.observe(element[0], {
attributes: true,
childList: false,
characterData: false
});
} catch (e) {
angular.element(element).removeClass('anim-out-setup');
angular.element(element).addClass('anim-out');
$timeout(done, Math.max(100, outSpeed));
}
angular.element(element).addClass('anim-out-setup');
}
};
}
]);
})();