HTMLElement.prototype.getElementTop=function(){ var top = this.offsetTop; var cur = this.offsetParent; while(cur != null){ top += cur.offsetTop; cur = cur.offsetParent; } return top; } 直接調用getElementTop()即可或得元素距離頂部的值
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
樓梯效果:
window.addEventListener("load",function(){
floor.init();
},false);
//為所有元素添加獲得距頁面頂部距離的方法,返回一個top值
HTMLElement.prototype.getElementTop=function(){
//獲得當前元素距父元素頂部的距離,保存在變量top中
var top=this.offsetTop;
//將當前元素的相對定位父元素對象保存在變量curr中
var curr=this.offsetParent;
//循環,只要curr不等於null,就繼續獲得父元素的父元素
while(curr!=null){
// 再次獲得curr距它的父元素頂部的距離,累加到top中
top+=curr.offsetTop;
// 將curr再設置為curr的相對定位的父元素
curr=curr.offsetParent;
}
return top;
}
var floor={
init:function(){
var self=this;
window.addEventListener("scroll",function(){
//獲得頁面滾動的高度
var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
//找到class為floor的div下的head下的所有span,保存在數組spans中
var spans=$("div.floor>header>span");
//遍歷spans中每個span
for(var i=0;i<spans.length;i++){
// 獲得當前span距頁面頂部的距離,保存在變量spanTop中
var spanTop=spans[i].getElementTop();
// 如果spanTop剛好結余文檔顯示區范圍內時
if(spanTop>scrollTop+100&&spanTop<scrollTop+window.innerHeight-100){
// 設置當前span的className為"hover"
spans[i].className="hover";
}else{// 否則
// 清除當前span的className
spans[i].className="";
}
}
self.elevState();
},false);
$("#elevator>ul").addEventListener("mouseover",function(){
var e=window.event||arguments[0];
var target=e.srcElement||e.target;
if(target.nodeName=="A"&&target.className!="etitle"){
target.style.display="none";
target.parentNode.$(".etitle").style.display="block";
}
},false);
$("#elevator>ul").addEventListener("mouseout",function(){
var e=window.event||arguments[0];
var target=e.srcElement||e.target;
if(target.nodeName=="A"&&target.className=="etitle"&&$(target.href.slice(-3)+">header>span").className!="hover"){
target.style.display="none";
target.parentNode.$("a:first-child").style.display="block";
}
},false);
},
elevState:function(){
//判斷elevator元素的顯示狀態
$("#elevator").style.display=$("div.floor>header>span.hover").length!=0?"block":"none";
//獲得所有span的數組和所有li的數組
var spans=$("div.floor>header>span");
var lis=$("#elevator>ul>li");
//遍歷spans中每個span
for(var i=0;i<spans.length;i++){
// 在lis中找到相同位置的li
var li=lis[i];
// 如果當前span的class為hover
if(spans[i].className=="hover"){
// 在li下找第一個a,隱藏
li.$("a:first-child").style.display="none";
// 在li下找第二個a,顯示
li.$("a:first-child+a").style.display="block";
}else{// 否則
// 在li下找第一個a,顯示
li.$("a:first-child").style.display="block";
// 在li下找第二個a,隱藏
li.$("a:first-child+a").style.display="none";
}
}
}
}
