这个错在哪?

来源:6-4 编程练习

飞天意大利面神兽

2016-07-14 10:54

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

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

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

//定义getByClassName函数,让函数实现给对象增加class 
function getclsname(cls, parent) {
var oparent = parent ? document.getElementById(parent) : document;
var eles = [];
var elements = oparent.getElementsByTagName("*");
for(var i = 0; i < elements.length; i++) {
if(elements[i].className == cls) {
eles.push(elements[i]);
}
}
return eles;
}

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 = getclsname("item");

var currentId = "";

for(var i = 0; i < items.length; i++) {
var _item = items[i];
var _itemTop = _item.offsetTop;
if(top > _itemTop - 200) {
currentId = _item.id;
} else {
break;
}
}

if(currentId) {
for(var i = 0; i < menus.length; i++) {
var mu = menus[i];
var href = mu.href.split("#");
if(href[href.length - 1] != currentId) {
removeClass(mu, "current");
} else {
addClass(mu, "current");
}
}
}
}
}

非常感谢!

写回答 关注

2回答

  • 慕先生7297594
    2017-06-21 11:43:48

    视屏里面的是这个,但是我一直运行不了,但改成了 var top = document.documentElement.scrollTop || document.body.scrollTop; 这样之后才行,为什么?

    慕先生729... 回复钱钱钱钱钱钱...

    好像是不同浏览器的兼容性问题,还是用着个吧,兼容性比较好。

    2017-10-07 15:07:52

    共 2 条回复 >

  • 罗毅豪
    2016-07-14 14:13:54

    第35行改成var top = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;

    飞天意大利面...

    不行。。。

    2016-07-15 10:10:16

    共 1 条回复 >

网页定位导航特效

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

71404 学习 · 486 问题

查看课程

相似问题