在活动导航项下方显示箭头

时间:2013-09-25 16:36:14

标签: javascript jquery html css

我目前正在建立一个投资组合网站,以展示我在大学期间完成的一些工作,并确定了单页设计。我希望网站做的是当你向下滚动并“输入”各个部分时,导航栏下方的向下箭头将水平滑动(作为动画)到当前活动部分/导航项目下方。

我尝试了什么?我会说实话,没什么。我不是在寻找答案,虽然那会很好,我只需要一个起点。主要问题是我真的不知道如何将它“捕捉”到每个列表项下面,这样它就完全是文本的核心,并且可以满足不同的显示分辨率。

HTML

  <div id="header">
        <div class="topbar">
        </div>
        <div class="headbar">
            <nav>
                <div class="wrapper">
                    <ul>
                        <li><a href="#home">Home</a></li>
                        <li><a href="#about">About</a></li>
                        <li><a href="#work">Projects</a></li>
                        <li><a href="#contact">Contact</a></li>
                        <li><a href="#">Blog</a></li>
                    </ul>
                </div>
            </nav>
        </div>
        <div class="shadow">
        </div>
        <div class="current"></div>
    </div>

CSS

.wrapper {
width: 920px;
margin: 0 auto;
}

#header {
position: fixed;
width: 100%;
}

#header .topbar {
height: 10px;
background-color: #386c93;
}

#header .headbar {
height: 60px;
background: #f2f2f2;
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmMmYyZjIiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjY2JlYmZmIiBzdG9wLW9wYWNpdHk9IjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZpbGw9InVybCgjZ3JhZC11Y2dnLWdlbmVyYXRlZCkiIC8+Cjwvc3ZnPg==);
background: -moz-linear-gradient(top, #ffffff 0%, #f2f2f2 100%, #cbebff 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#f2f2f2), color-stop(100%,#cbebff));
background: -webkit-linear-gradient(top, #ffffff 0%,#f2f2f2 100%,#cbebff 100%);
background: -o-linear-gradient(top, #ffffff 0%,#f2f2f2 100%,#cbebff 100%);
background: -ms-linear-gradient(top, #ffffff 0%,#f2f2f2 100%,#cbebff 100%);
background: linear-gradient(to bottom, #ffffff 0%,#f2f2f2 100%,#cbebff 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#cbebff',GradientType=0 );
border-bottom: 1px solid #9b9999;
}

#header .shadow {
height: 17px;
background-image: url('shadow.png');
background-repeat: none;
background-position: center;
}

#header a {
color: #5c5959;
text-decoration: none;
}

#header a:hover {
color: #0092ff;
}

#header .current {
background-image: url('nav-pointer.PNG');
height: 19px;
width: 22px;
margin-top: -18px;
margin-left: 715px;
}

#header ul{
padding-top: 20px;
text-align: center;
list-style: none;
}

#header li {
font-size: 16px;
//float: left;
display: inline;
color: #5c5959;
padding: 30px;
}

我创建了一个JSFiddle只是为了让每个人的生活更轻松 - http://jsfiddle.net/GW6CG/2/ - 如果CSS有点乱,我会道歉,我打算在某些时候清理它。

或者,您可以在此处查看该网站:http://www.jonline.me.uk/dev/

非常感谢你的时间!

2 个答案:

答案 0 :(得分:2)

从头开始创建此功能毫无意义。已经创建了许多插件来完成此任务。一个是scrollit.js

此外,如果您想在滚动时添加屁声,请查看fartscroll.js

希望我帮助过。

答案 1 :(得分:1)

我前段时间写过一些内容,您可以轻松地将其作为骨架使用: http://jsfiddle.net/LYqVk/2/

JQuery看起来像这样:

$('a[href*=#]').click(function (e) {
    e.preventDefault();

    var id = $(this).attr('href');
    var scrollTo = $(id).offset().top;

    $('html,body').animate({
        'scrollTop': scrollTo
    }, 500);
});

$(document).scroll(function () {
    highlightSection();
});

function highlightSection() {
    // Where's the scroll at?
    var currentPosition = $(this).scrollTop();

    // Remove highlights from all
    $('a[href*=#]').removeClass('highlighted');

    // Loop over each section
    $('#content .section').each(function () {
        // Calculate the start and end position of the section
        var sectionStart = $(this).offset().top;
        var sectionEnd = sectionStart + $(this).height();

        // If the current scroll lies between the start and the end of this section
        if (currentPosition >= sectionStart  && currentPosition < sectionEnd) {
            // Highlight the corresponding anchors
            $('a[href=#' + $(this).attr('id') + ']').addClass('highlighted');
        }
    });
};

highlightSection();

仔细阅读代码中的注释,希望它们足够解释,但以防它们不是基本过程是这样的:

  1. 找出我们在页面上的位置 - .scrollTop()
  2. 循环.sections
  3. 如果当前位置位于某个部分的顶部和底部之间,那就是我们要突出显示的部分*

      在你的情况下,
    • 将带箭头。