有什么问题?

来源:6-3 使用JS实现函数

LanceChou

2016-11-15 16:30

  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回答

  • 霓裳梦竹Andy
    2016-11-16 08:53:44
    已采纳

    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;

    幕布斯732... 回复LanceC...

    你试着输出document.documentElement.scrollTop的值,发现不管怎么滚动值都为0。第二种,当document.documentElement.scrollTop获取到的值为0时,因为是或运算,值为0还会继续去计算document.body.scrollTop的值。

    2016-11-16 21:47:08

    共 2 条回复 >

网页定位导航特效

本课程讲解网页定位导航特效,仿天猫版地狗购物网,你值得拥有

71404 学习 · 486 问题

查看课程

相似问题