mediawiki/stylesheets/sticky.jsd82c14fb4fbamaster
mediawiki/stylesheets/sticky.js
d82c14fb4fbamaster
sticky.js
sticky.js
// Make a layer that stays in the same place on screen when scrolling the browser window. | |||
// Version 1.2 | |||
// See http://www.mark.ac/help for browser support. | |||
var mySticky; | |||
var theLayer; | |||
// Setup variables for sliding. | |||
// lastY and staticYOffset should match your CSS top definition. | |||
lastY=10;YOffset=0;staticYOffset=10;refreshMS=25; | |||
// Setup function that runs when the page loads. | |||
function setup(eID){ | |||
bw=new checkBrowser; | |||
if(bw.ns4||bw.opera){MM_reloadPage(true);} | |||
var noFix=bw.ie4||bw.ns4||(bw.ns6&&bw.mac)||(bw.macie50)?true:false; | |||
if (window.attachEvent){fix_bind()} | |||
else if(noFix){ | |||
if(bw.ns6){document.getElementById(eID).style.position="absolute";} | |||
if(bw.macie50){document.getElementById(eID).style.position="absolute";document.getElementById(eID).style.backgroundColor="#ccffcc";} | |||
if(bw.ns6&&YOffset==0){YOffset=-15} | |||
mySticky=new makeLayerObj(eID); | |||
layerSlide(eID)} | |||
else{ | |||
mySticky=new makeLayerObj(eID); | |||
mySticky.css.position="fixed";} | |||
if(!mySticky){mySticky=new makeLayerObj(eID);} | |||
//mySticky.css.visibility="visible"; | |||
} | |||
// ------------------------- | |||
// emulate css 'position: fixed' in IE5+ Win | |||
// code by [email protected] | |||
fix_elements = new Array(); | |||
function fix_event(){ | |||
var i; | |||
for (i=0; i < fix_elements.length; i++){ | |||
fix_elements[i].style.left = parseInt(fix_elements[i].fix_left)+document.getElementsByTagName('html')[0].scrollLeft+document.getElementsByTagName('body')[0].scrollLeft+'px'; | |||
fix_elements[i].style.top = parseInt(fix_elements[i].fix_top)+document.getElementsByTagName('html')[0].scrollTop+document.getElementsByTagName('body')[0].scrollTop+'px'; | |||
} | |||
} | |||
function fix_bind(){ | |||
var i; | |||
for (i=0; i < document.all.length; i++){ | |||
if (document.all[i].currentStyle.position=='fixed'){ | |||
document.all[i].fix_left = document.all[i].currentStyle.left; | |||
document.all[i].fix_top = document.all[i].currentStyle.top; | |||
document.all[i].style.position = 'absolute'; | |||
fix_elements[fix_elements.length] = document.all[i]; | |||
window.attachEvent('onscroll', fix_event); | |||
window.attachEvent('onresize', fix_event); | |||
} | |||
} | |||
} | |||
// ------------------------- | |||
// ------------------------- | |||
// DHTML menu sliding. Requires checkBrowser() | |||
// Based on source at http://www.simplythebest.net/ | |||
function layerSlide(layerID) { | |||
if(bw.dhtml){ | |||
if(!mySticky){mySticky=new makeLayerObj(layerID);} | |||
if (bw.ns) {winY = window.pageYOffset;} | |||
else if (bw.ie) {winY = document.body.scrollTop;} | |||
if (bw.ie||bw.ns) { | |||
if (winY!=lastY&&winY>YOffset-staticYOffset){smooth = .3 * (winY - lastY - YOffset + staticYOffset);} | |||
else if (YOffset-staticYOffset+lastY>YOffset-staticYOffset){smooth = .3 * (winY - lastY - (YOffset-(YOffset-winY)));} | |||
else{smooth=0} | |||
if(smooth > 0) {smooth = Math.ceil(smooth);} | |||
else{smooth = Math.floor(smooth);} | |||
if (bw.ie){mySticky.css.pixelTop+=smooth;} | |||
else if (bw.ns){mySticky.css.top=parseInt(mySticky.css.top)+smooth;} | |||
lastY = lastY+smooth; | |||
top.window.status=new Date() | |||
setTimeout('layerSlide("'+layerID+'")', refreshMS)}}} | |||
// ------------------------- | |||
// Netscape 4.x browser resize fix | |||
function MM_reloadPage(init) { | |||
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) { | |||
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; top.onresize=MM_reloadPage; }} | |||
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) {location.reload();}} | |||
// Create browser-independent layer and browser objects | |||
function makeLayerObj(eID){ | |||
if(document.getElementById){this.css=document.getElementById(eID).style} | |||
else if(document.layers){this.css=document.layers[eID];} | |||
else if(document.all){this.css=document.all[eID].style;} | |||
return this | |||
} | |||
function checkBrowser(){ | |||
this.ver=navigator.appVersion; | |||
this.name=navigator.appName; | |||
this.mac=(navigator.platform.toLowerCase().indexOf('mac')>-1)?true:false; | |||
this.opera=(navigator.userAgent.toLowerCase().indexOf('opera')>-1)?true:false; | |||
this.dom=document.getElementById?true:false; | |||
this.ns=(this.name=='Netscape'); | |||
this.ie4=(document.all && !this.dom)?true:false; | |||
this.ie=(this.name =='Microsoft Internet Explorer'&&!this.opera)?true:false; | |||
this.ie5=(this.ie && (navigator.userAgent.indexOf("MSIE 5")!=-1))?true:false; | |||
this.macie50=(this.mac&&this.ie5&&(navigator.userAgent.indexOf("MSIE 5.0")!=-1))?true:false | |||
this.ns4=(this.ns && parseInt(this.ver) == 4)?true:false; | |||
this.ns6=((this.name=="Netscape")&&(parseInt(this.ver)==5))?true:false | |||
this.standards=document.getElementById?true:false; | |||
this.dhtml=this.standards||this.ie4||this.ns4; | |||
} | |||
function showMe(eID){ | |||
myFloater=new makeLayerObj(eID) | |||
myFloater.css.visibility="visible"; | |||
} | |||
function hideMe(eID){ | |||
myFloater=new makeLayerObj(eID) | |||
myFloater.css.visibility="hidden"; | |||
} |
Content licensed under Creative Commons Attribution-ShareAlike (CC BY-SA) 4.0 unless otherwise noted; code licensed under GNU General Public License (GPL) 2.0 or later and other open source licenses. By using this site, you agree to the Terms of Use, Privacy Policy, and Code of Conduct. · Wikimedia Foundation · Privacy Policy · Code of Conduct · Terms of Use · Disclaimer · CC-BY-SA · GPL · Credits