2014-01-08 25 views
0

我有一个简单的圆形div的侧面导航,点击一个滚动到相关的.block股利,这一切工作得很好。现在,虽然我想知道是否有可能突出显示相关的.nav-item股利,这取决于哪一个股利在看。
例如如果#block-3进入视野,与data-hook="3"相关的.nav-item div将突出显示background-color: blue

的jsfiddle演示:http://jsfiddle.net/rf4Ea/3/

HTML:jQuery:高亮导航当div滚动查看

<div id="block-one" class="block"></div> 
<div id="block-two" class="block"></div> 
<div id="block-three" class="block"></div> 
<div id="block-four" class="block"></div> 
<div id="block-five" class="block"></div> 

<ul class="nav-wrap"> 
    <li class="nav-item" data-hook="one"></li> 
    <li class="nav-item" data-hook="two"></li> 
    <li class="nav-item" data-hook="three"></li> 
    <li class="nav-item" data-hook="four"></li> 
    <li class="nav-item" data-hook="five"></li> 
</ul> 

的jQuery:

$(document).ready(function() { 

    Resize(); 
}); 

//Every resize of window 
$(window).resize(function() { 
    Resize(); 
}); 

//Dynamically assign height 
function Resize() { 
    // Handler for .ready() called. 
    var divwid = $(window).height()/2, 
     navhei = $('.nav-wrap').height()/2, 
     newhei = divwid - navhei; 
    $('.nav-wrap').css({ 
     'top': newhei 
    }); 

} 


$('.nav-item').click(function() { 
    $('html, body').animate({ 
     scrollTop: $('#block-' + $(this).attr('data-hook')).offset().top - 0 
    }, "slow"); 
}); 

如果这是在所有可能的?任何建议将不胜感激!

+0

_“[Waypoints](https://github.com/imakewebthings/waypoints)是一个库,它可以在您滚动到某个元素时轻松执行某个功能。”_ 听起来像是问题的工具。以下是如何使用jQuery库 - http://imakewebthings.com/waypoints/guides/jquery-zepto/。 –

回答

2

添加在你的CSS选择这样的一类:

.nav-item:hover, .nav-item.selected { 
    background-color: blue; 
} 

您可以在滚动事件绑定一个函数来改变当前的导航项目的颜色:

function hoverCurrentItem() { 
    var h = $(".block:first").height(); 
    var sIndex = Math.floor($(window).scrollTop()/h); 
    var $sItem = $(".nav-item").eq(sIndex); 
    if (!$sItem.hasClass("selected")) { 
     $(".selected").removeClass("selected"); 
     $sItem.addClass("selected"); 
    }  
} 
hoverCurrentItem(); 

$(window).scroll(function(e) { 
    hoverCurrentItem() 
}); 

JsFiddle

+0

我遇到了这个解决方案的一个小问题,因为'var h'等于只有第一个'.block' div,如果所有'.block' div都是不同的高度(它们将作为内容被管理通过CMS,这个解决方案不再起作用,如下所示:http://jsfiddle.net/neal_fletcher/u38VL/1/有没有一种方法可以解决这个问题? – user1374796

+0

我更新了你的小提琴,至少工作在:http:/ /jsfiddle.net/neal_fletcher/u38VL/1/但也许有更优雅的解决方案。 –

+0

这似乎是相同的链接?找不到更新的小提琴? – user1374796