模仿百度百科右侧导航


HTML:

<div id="art_content">
    <div class="box">
        <h2>标题h2>
        <h3>标题h3>
    div>
    <div class="box">
        <h2>标题h2>
        <h3>标题h3>
    div>
    <div class="box">
        <h2>标题h2>
        <h3>标题h3>
    div>
div>
<div id="Catalog_box">div>        

ps:art_content是包含页面标题的容器,Catalog_box是包含导航的容器

在初始化方法:

CateNav("#art_content","#Catalog_box");

JavaScript:

function CateNav(elem1, elem2) {
    //添加目录
    var currObj;
    var offsetTop = 0;
    var h2List = new Array(), h3List = new Array();

    var addNav = function () {
        var i1 = 0, i2 = 0, n1 = 0, n2 = 0;
        var temp = '';
        var cateList = $(elem1).html().match(/(]*>.*?<\/h[2-3]>)/ig);
        for (var i = 0; i < cateList.length; i++) {
            if (/(]*>.*?<\/h2>)/ig.test(cateList[i])) {
                n1++;
                n2 = 0;
                temp += '
  • ' + n1 + '.' + cateList[i].replace(/<[^>].*?>/g, "") + '
  • '; h2List[i1] = n1; i1++; } else { n2++; temp += '
    ' + n1 + '.' + n2 + '' + cateList[i].replace(/<[^>].*?>/g, "") + '
    '; h3List[i2] = n1 + '_' + n2; i2++; } } $(elem2).append(temp); }; //添加锚点 var addPoint = function () { var i1 = i2 = 0; $(elem1).find('h2').each(function () { $(this).prepend(''); i1++; }); $(elem1).find('h3').each(function () { $(this).prepend(''); i2++; }); }; //点击锚点,跳转制定位置 var clickPoint = function () { $(elem2 + ' a').click(function (e) { e.preventDefault(); $(elem2 + ' span').removeClass('active'); $(this).parent('span').addClass('active'); currObj = $("[name='" + $(this).attr('href').replace(/#/, '') + "']"); offsetTop = currObj.offset().top; $('html,body').animate({ scrollTop: offsetTop }, 500, 'swing'); }); }; //屏幕滚动,显示并选中锚点 var scrollWin = function () { var windowTop = 0; $(window).scroll(function () { windowTop = $(window).scrollTop() + 10; /*if(windowTop>=$(elem1).offset().top){ $(".page_right").slideDown(750); }else{ $(".page_right").slideUp(750); }*/ $(elem2 + ' a').each(function () { currObj = $("[name='" + $(this).attr('href').replace(/#/, '') + "']"); offsetTop = currObj.offset().top; if (windowTop > offsetTop) { $(elem2 + ' span').removeClass('active'); $(this).parent('span').addClass('active'); return; } }); }); }; var init = function () { addNav(); addPoint(); clickPoint(); scrollWin(); }; init(); }

    妥妥哒O(∩_∩)O~