Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagemath.github.io
Path: blob/master/calctut/calctut-res/navbar.js
2467 views
1
var navbarjs = {
2
currentTab: 0,
3
activeTab: 0,
4
destX: null,
5
destW: null,
6
t: null,
7
b: null,
8
c: null,
9
d: 6, //resolution/posdiff
10
posdiff: null,
11
speed: 15,
12
animInterval: null,
13
slideObj: null,
14
aHeight: 0,
15
stopAnimation: false,
16
17
init: function() {
18
19
var ul = document.getElementById("navbar");
20
if(ul == null) { /*alert("error: navbar missing");*/ return false;}
21
var liArr = ul.getElementsByTagName("li");
22
var aArr = ul.getElementsByTagName("a");
23
24
for(var i = 0, li; li = liArr[i]; i++) {
25
if(aArr[i] === null) continue;
26
aArr[i].onclick = function(e) {
27
navbarjs.stopAnimation = true;
28
return true;
29
}
30
liArr[i].onmouseover = aArr[i].onfocus = function(e) {
31
var pos = 0;
32
var elem = this.nodeName == "LI" ? this : this.parentNode;
33
while(elem.previousSibling) {
34
elem = elem.previousSibling;
35
if(elem.tagName && elem.tagName == "LI") pos++;
36
}
37
navbarjs.initSlide(pos, true);
38
}
39
};
40
41
ul.onmouseout = function(e) {
42
if (navbarjs.stopAnimation) return;
43
navbarjs.initSlide(navbarjs.currentTab, false);
44
};
45
46
if (document.location.href.charAt(document.location.href.length-1) == "/") {
47
navbarjs.activeTab = navbarjs.currentTab = aArr.length-1;
48
aArr[aArr.length-1].setAttribute("class", "active");
49
} else {
50
for(var i = 0; i < aArr.length; i++) {
51
//alert(aArr[i].href.substring(0,aArr[i].href.length-5));
52
if(document.location.href.indexOf(aArr[i].href.substring(0,aArr[i].href.length-5))>=0) {
53
navbarjs.activeTab = navbarjs.currentTab = i;
54
aArr[i].setAttribute("class", "active");
55
break;
56
}
57
}
58
};
59
if (navbarjs.slideObj == null) {
60
navbarjs.slideObj = ul.parentNode.appendChild(document.createElement("div"));
61
}
62
with(navbarjs.slideObj) {
63
appendChild(document.createTextNode(String.fromCharCode(160)));
64
id = "animated-tab";
65
style.top = (ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop) + "px";
66
style.left = (ul.offsetLeft + liArr[navbarjs.activeTab].offsetLeft + aArr[navbarjs.activeTab].offsetLeft) + "px";
67
style.width = aArr[navbarjs.activeTab].offsetWidth + "px";
68
};
69
70
navbarjs.aHeight = ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop;
71
72
var intervalMethod = function() { navbarjs.slideIt(); }
73
navbarjs.animInterval = setInterval(intervalMethod,navbarjs.speed);
74
75
navbarjs.initSlide(navbarjs.currentTab, true);
76
},
77
78
cleanUp: function() {
79
clearInterval(navbarjs.animInterval);
80
navbarjs.animInterval = null;
81
},
82
83
initSlide: function(pos, force) {
84
if(!force && pos == navbarjs.activeTab) return;
85
navbarjs.activeTab = pos;
86
var newposdiff = Math.abs(navbarjs.currentTab - navbarjs.activeTab);
87
if (newposdiff > 0) { navbarjs.posdiff = newposdiff; }
88
navbarjs.initAnim();
89
},
90
91
initAnim: function() {
92
var ul = document.getElementById("navbar");
93
var liArr = ul.getElementsByTagName("li");
94
var aArr = ul.getElementsByTagName("a");
95
96
navbarjs.destX = parseInt(liArr[navbarjs.activeTab].offsetLeft + liArr[navbarjs.activeTab].getElementsByTagName("a")[0].offsetLeft + ul.offsetLeft);
97
navbarjs.destW = parseInt(liArr[navbarjs.activeTab].getElementsByTagName("a")[0].offsetWidth);
98
navbarjs.t = 0;
99
navbarjs.b = navbarjs.slideObj.offsetLeft;
100
navbarjs.c = navbarjs.destX - navbarjs.b;
101
102
navbarjs.bW = navbarjs.slideObj.offsetWidth;
103
navbarjs.cW = navbarjs.destW - navbarjs.bW;
104
105
106
navbarjs.slideObj.style.top = (ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop) + "px";
107
},
108
109
slideIt:function() {
110
var ul = document.getElementById("navbar");
111
var liArr = ul.getElementsByTagName("li");
112
var aArr = ul.getElementsByTagName("a");
113
114
// Has the browser text size changed?
115
if(navbarjs.aHeight
116
!= ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop) {
117
navbarjs.initAnim();
118
navbarjs.aHeight
119
= ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop;
120
};
121
var x;
122
var w;
123
var anisteps = navbarjs.d * navbarjs.posdiff + 3;
124
if(navbarjs.t++ < anisteps) {
125
x = navbarjs.animate(navbarjs.t,navbarjs.b,navbarjs.c,anisteps);
126
w = navbarjs.animate(navbarjs.t,navbarjs.bW,navbarjs.cW,anisteps);
127
128
navbarjs.slideObj.style.left = parseInt(x) + "px";
129
navbarjs.slideObj.style.width = parseInt(w) + "px";
130
} else {
131
navbarjs.slideObj.style.left = navbarjs.destX + "px";
132
navbarjs.slideObj.style.width = navbarjs.destW + "px";
133
}
134
},
135
136
animate: function(t,b,c,d) {
137
if ((t/=d/2) < 1) return c/2*t*t + b;
138
return -c/2 * ((--t)*(t-2) - 1) + b;
139
}
140
};
141
142
//window.onload = navbarjs.init;
143
//window.onunload = navbarjs.cleanUp;
144
145