Path: blob/master/calctut/calctut-res/navbar.js
2467 views
var navbarjs = {1currentTab: 0,2activeTab: 0,3destX: null,4destW: null,5t: null,6b: null,7c: null,8d: 6, //resolution/posdiff9posdiff: null,10speed: 15,11animInterval: null,12slideObj: null,13aHeight: 0,14stopAnimation: false,1516init: function() {1718var ul = document.getElementById("navbar");19if(ul == null) { /*alert("error: navbar missing");*/ return false;}20var liArr = ul.getElementsByTagName("li");21var aArr = ul.getElementsByTagName("a");2223for(var i = 0, li; li = liArr[i]; i++) {24if(aArr[i] === null) continue;25aArr[i].onclick = function(e) {26navbarjs.stopAnimation = true;27return true;28}29liArr[i].onmouseover = aArr[i].onfocus = function(e) {30var pos = 0;31var elem = this.nodeName == "LI" ? this : this.parentNode;32while(elem.previousSibling) {33elem = elem.previousSibling;34if(elem.tagName && elem.tagName == "LI") pos++;35}36navbarjs.initSlide(pos, true);37}38};3940ul.onmouseout = function(e) {41if (navbarjs.stopAnimation) return;42navbarjs.initSlide(navbarjs.currentTab, false);43};4445if (document.location.href.charAt(document.location.href.length-1) == "/") {46navbarjs.activeTab = navbarjs.currentTab = aArr.length-1;47aArr[aArr.length-1].setAttribute("class", "active");48} else {49for(var i = 0; i < aArr.length; i++) {50//alert(aArr[i].href.substring(0,aArr[i].href.length-5));51if(document.location.href.indexOf(aArr[i].href.substring(0,aArr[i].href.length-5))>=0) {52navbarjs.activeTab = navbarjs.currentTab = i;53aArr[i].setAttribute("class", "active");54break;55}56}57};58if (navbarjs.slideObj == null) {59navbarjs.slideObj = ul.parentNode.appendChild(document.createElement("div"));60}61with(navbarjs.slideObj) {62appendChild(document.createTextNode(String.fromCharCode(160)));63id = "animated-tab";64style.top = (ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop) + "px";65style.left = (ul.offsetLeft + liArr[navbarjs.activeTab].offsetLeft + aArr[navbarjs.activeTab].offsetLeft) + "px";66style.width = aArr[navbarjs.activeTab].offsetWidth + "px";67};6869navbarjs.aHeight = ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop;7071var intervalMethod = function() { navbarjs.slideIt(); }72navbarjs.animInterval = setInterval(intervalMethod,navbarjs.speed);7374navbarjs.initSlide(navbarjs.currentTab, true);75},7677cleanUp: function() {78clearInterval(navbarjs.animInterval);79navbarjs.animInterval = null;80},8182initSlide: function(pos, force) {83if(!force && pos == navbarjs.activeTab) return;84navbarjs.activeTab = pos;85var newposdiff = Math.abs(navbarjs.currentTab - navbarjs.activeTab);86if (newposdiff > 0) { navbarjs.posdiff = newposdiff; }87navbarjs.initAnim();88},8990initAnim: function() {91var ul = document.getElementById("navbar");92var liArr = ul.getElementsByTagName("li");93var aArr = ul.getElementsByTagName("a");9495navbarjs.destX = parseInt(liArr[navbarjs.activeTab].offsetLeft + liArr[navbarjs.activeTab].getElementsByTagName("a")[0].offsetLeft + ul.offsetLeft);96navbarjs.destW = parseInt(liArr[navbarjs.activeTab].getElementsByTagName("a")[0].offsetWidth);97navbarjs.t = 0;98navbarjs.b = navbarjs.slideObj.offsetLeft;99navbarjs.c = navbarjs.destX - navbarjs.b;100101navbarjs.bW = navbarjs.slideObj.offsetWidth;102navbarjs.cW = navbarjs.destW - navbarjs.bW;103104105navbarjs.slideObj.style.top = (ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop) + "px";106},107108slideIt:function() {109var ul = document.getElementById("navbar");110var liArr = ul.getElementsByTagName("li");111var aArr = ul.getElementsByTagName("a");112113// Has the browser text size changed?114if(navbarjs.aHeight115!= ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop) {116navbarjs.initAnim();117navbarjs.aHeight118= ul.offsetTop + liArr[navbarjs.activeTab].offsetTop + aArr[navbarjs.activeTab].offsetTop;119};120var x;121var w;122var anisteps = navbarjs.d * navbarjs.posdiff + 3;123if(navbarjs.t++ < anisteps) {124x = navbarjs.animate(navbarjs.t,navbarjs.b,navbarjs.c,anisteps);125w = navbarjs.animate(navbarjs.t,navbarjs.bW,navbarjs.cW,anisteps);126127navbarjs.slideObj.style.left = parseInt(x) + "px";128navbarjs.slideObj.style.width = parseInt(w) + "px";129} else {130navbarjs.slideObj.style.left = navbarjs.destX + "px";131navbarjs.slideObj.style.width = navbarjs.destW + "px";132}133},134135animate: function(t,b,c,d) {136if ((t/=d/2) < 1) return c/2*t*t + b;137return -c/2 * ((--t)*(t-2) - 1) + b;138}139};140141//window.onload = navbarjs.init;142//window.onunload = navbarjs.cleanUp;143144145