【问题标题】:jQuery: highlight nav when div scrolls into viewjQuery:当 div 滚动到视图中时突出显示导航
【发布时间】:2016-08-15 00:21:13
【问题描述】:

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

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

HTML:

<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");
});

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

【问题讨论】:

标签: javascript jquery html css


【解决方案1】:

像这样添加在你的 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

【讨论】:

  • 我遇到了这个解决方案的一个小问题,因为var h 仅等于第一个.block div,如果所有.block div 的高度不同(它们将作为内容将通过 CMS 进行管理,此解决方案不再有效。如下所示:jsfiddle.net/neal_fletcher/u38VL/1 有没有办法解决这个问题?
  • 我更新了你的小提琴。这至少有效:jsfiddle.net/neal_fletcher/u38VL/1 但可能有更优雅的解决方案。
  • 这似乎是同一个链接?找不到更新的小提琴?
猜你喜欢
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2014-09-13
相关资源
最近更新 更多