为了账号安全,请及时绑定邮箱和手机立即绑定

有什么问题?

  function getByClassName(obj,cls){
        var elements=document.getElementsByTagName('*');
        var result=[];
        for(var i=0;i<elements.length;i++){
            if(elements[i].className==cls){
                result.push(elements[i]);
            }
        }
        return result;
    }

    function hasClass(obj,cls){
        return obj.className.match(new RegExp("(\\s|^)"+cls+"(\\s|$)"));
    }

    function removeClass(obj,cls){
        if(hasClass(obj,cls)){
            var reg=new RegExp("(\\s|^)"+cls+"(\\s|$)");
            obj.className=obj.className.replace(reg,'');
        }
    }

    function addClass(obj,cls){
        if(!hasClass(obj,cls)){
            obj.className+=' '+cls;
        }
    }

    window.onload=function(){
        window.onscroll=function(){
            var top=document.documentElement?document.documentElement.scrollTop:document.body.scrollTop;
            var menus=document.getElementById('menu').getElementsByTagName('a');
            var items=getByClassName(document.getElementById('content'),'item');
            var currentId='';
            for(var i=0;i<items.length;i++){
                var oitem=items[i];
                var oitemTop=oitem.offsetTop;
                console.log(oitem.offsetTop);
                if(top>oitemTop-200){
                    currentId=oitem.id;
                }else{
                    break;
                }
            }
            if(currentId){
                for(var j=0;j<menus.length;j++){
                    var omenu=menus[j];
                    var ohref=omenu.href.split('#');
                    if(ohref[ohref.length-1]!=currentId){
                        removeClass(omenu,'current');
                    }else{
                        addClass(omenu,'current');
                    }
                }
            }
        }
    }

 

正在回答

1 回答

1,getByClassName 里面的  var elements=document.getElementsByTagName('*');应该为var elements=obj.getElementsByTagName('*');

2,var top=document.documentElement?document.documentElement.scrollTop:document.body.scrollTop;改成var top=document.documentElement.scrollTop||document.body.scrollTop;

0 回复 有任何疑惑可以回复我~
#1

LanceChou 提问者

第二个为什么这样改,2种有什么区别?
2016-11-16 回复 有任何疑惑可以回复我~
#2

幕布斯7328391 回复 LanceChou 提问者

你试着输出document.documentElement.scrollTop的值,发现不管怎么滚动值都为0。第二种,当document.documentElement.scrollTop获取到的值为0时,因为是或运算,值为0还会继续去计算document.body.scrollTop的值。
2016-11-16 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

有什么问题?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信