获取任意元素距离页面顶部的距离 楼梯效果

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";
            }
        }
    }
}

 

posted @ 2016-08-25 14:37  蛋Mrs炒饭  阅读(4922)  评论(0编辑  收藏  举报