我目前正在建立一个投资组合网站,以展示我在大学期间完成的一些工作,并确定了单页设计。我希望网站做的是当你向下滚动并“输入”各个部分时,导航栏下方的向下箭头将水平滑动(作为动画)到当前活动部分/导航项目下方。
我尝试了什么?我会说实话,没什么。我不是在寻找答案,虽然那会很好,我只需要一个起点。主要问题是我真的不知道如何将它“捕捉”到每个列表项下面,这样它就完全是文本的核心,并且可以满足不同的显示分辨率。
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/
非常感谢你的时间!
答案 0 :(得分:2)
答案 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();
仔细阅读代码中的注释,希望它们足够解释,但以防它们不是基本过程是这样的:
.scrollTop()
.sections
如果当前位置位于某个部分的顶部和底部之间,那就是我们要突出显示的部分*