-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOrbitNav.js
90 lines (80 loc) · 2.3 KB
/
OrbitNav.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
89
90
let orbitnav = (function() {
let isCollapsed = true;
let distance;
let navBtns;
let container;
let closeBtns;
let spinOut;
return {
initialize: function(opt) {
if (typeof opt != 'object') {
opt = {};
}
let options = {
distance: 150,
buttonClass: 'orbit-nav-btn',
closeButton: 'orbit-close-btn',
container: 'orbit-nav-container',
spinOut: true,
};
for (let key in opt) {
if (options.hasOwnProperty(key)) {
options[key] = opt[key];
}
}
distance = options.distance;
navBtns = document.getElementsByClassName(options.buttonClass);
closeBtns = document.getElementsByClassName(options.closeButton);
container = document.getElementById(options.container);
spinOut = options.spinOut;
for (let btn of closeBtns) {
btn.addEventListener('click', function() {
orbitnav.collapse();
});
}
},
show: function() {
container.classList.remove('hidden');
setTimeout(function() {
container.style.opacity = 1;
for (let i = 0; i < navBtns.length; i++) {
let degrees = (((2 / navBtns.length * i) + 1) *
Math.PI) + (Math.PI / 2);
let transX = Math.cos(degrees) * distance;
let transY = Math.sin(degrees) * distance;
navBtns[i].style.transform =
'translate(' + transX + '%,' + transY + '%) ' +
'scale(1)';
if (spinOut) {
navBtns[i].style.transform += ' rotate(0deg)';
}
navBtns[i].classList.add('out');
}
});
isCollapsed = false;
},
collapse: function() {
let dur = parseFloat(window.getComputedStyle(closeBtns[0]).getPropertyValue('transition-duration')) * 1000;
container.style.opacity = 0;
setTimeout(function() {
container.classList.add('hidden');
}, dur);
for (let btn of navBtns) {
btn.style.transform = 'translate(0,0) scale(0.5)';
if (spinOut) {
btn.style.transform += ' rotate(180deg)';
}
btn.classList.remove('out');
}
isCollapsed = true;
},
toggle: function() {
if (!isCollapsed) {
this.collapse();
}
else {
this.show();
}
},
};
})();