【问题标题】:Highlight Anchor Links when user manually scrolls? [duplicate]用户手动滚动时突出显示锚链接? [复制]
【发布时间】:2015-11-24 10:40:27
【问题描述】:

我为这篇长文道歉。我想包括所有可能有用的东西。

我有一个由多个垂直堆叠的 div 组成的单页网站。我正在使用浮动导航栏和softscroll.js 使锚链接在单击时移动到 div。

我是一名前端设计师,但通过这个网站以及数小时的试错和谷歌搜索,我已经能够让所有元素正常工作。 (窗口调整大小、突出显示单击的锚链接、滚动等时自动调整 div 高度)

我已经对其进行了设置,以便单击锚链接将其类更改为“活动”。这很好用。但如果用户也手动滚动到 div,我想触发同样的事情。

我已经看过几次使用的代码in this post。但它取代了一些我已经开始工作但仍然没有突出显示的代码。

这是我用于活动锚点的代码:

// JS for highlight selected button
$(function() {
    $("a").click(function() {
      // remove classes from all
      $("a").removeClass("active");
      // add class to the one we clicked
      $(this).addClass("active");
   });
});

我正在使用这个来根据窗口大小调整 div 的大小。不确定它是否相关,但在这里:

// JS for Div Height Auto Resize 
$(document).ready(function(){
  resizeDiv();
});

window.onresize = function(event) {
  resizeDiv();
}

function resizeDiv() {
  vpw = $(window).width();
  vph = $(window).height();
  $('.layoutblock').css({'height': vph + 'px'});
}

这是菜单 HTML:

<div id="navigation">
<ul>
<li><a href="#composition" ><img src="images/icons/compicon.png" alt="composition" width="32" height="36" border="0" align="middle" />Composition</a></li>
<li><a href="#creative"><img src="images/icons/designicon.png" alt="Large Format" width="36" height="33" border="0" align="middle" /> Creative</a></li>
[...]
</ul>
</div>

...和菜单 CSS:

  #navigation {
    background-color: #F60;
    position: fixed;
    height: 100%;
    width: 60px;
     -moz-transition:width .5s;
    -webkit-transition:width .5s;
    -o-transition:width .5s;
    transition:width .5s;
    overflow: hidden;
    left: 0px;
    top: 0px;
    z-index: 99;
    padding-top: 30px;
    margin-left: 0px;
}

#navigation:hover {
    margin-left: 0px;
    width: 190px;
}

#navigation li {
    list-style: none;
    margin-left: -40px;

}

#navigation img {
    padding-left: 5px;
    padding-right: 20px;
}
#navigation li a {
    font-family: "Proxima N W01 Smbd", Arial, Helvetica;
    font-size: 14px;
    display: block;
    color: white;
    font-weight:bold;
    text-decoration: none;
    text-transform:uppercase;
    line-height:26px;
    padding-left:5px;
    padding-right: 5px;
    padding-top: 10px;
    height: 50px;
    white-space: nowrap;
}

a.active{
    background-color: #333;
}

最后,这里是测试页面的 URL:[为安全起见,网站已启动]

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    好吧,我在这里找到了我的答案:Change Active Menu Item on Page Scroll?,这导致了一个像魅力一样工作的小提琴。

    我最终使用代码来观察锚标记并根据这些标记更改菜单。它甚至包括软滚动和点击突出显示,因此我能够摆脱我正在使用的其他 sn-ps。

    另外需要注意的是:即使它在小提琴中运行,我也花了很长时间让它在我的网站上运行。结果我需要将 sn-p 放在身体的末端,以便在注册锚点之前加载所有内容。如果其他人遇到同样的问题,只是一个提示。

    【讨论】:

      【解决方案2】:

      您可以使用 Jquery 的 on 方法并监听 scroll 事件。

      【讨论】:

      • 这是个好消息。知道如何应对这种情况吗?由于 div 垂直调整大小,滚动事件是否有助于判断哪个 div 在视口中?我已经对它进行了一些搜索,它似乎可以判断鼠标何时滚动 p/down 但不知道在哪里?
      • $('.divYouWantToListenTo').on('scroll', function() {do stuff;})
      • 谢谢!但是查看我可以找到的文档和此处的示例:api.jquery.com/scroll 当特定 div 位于视口中时,我找不到任何有关如何实现 {do stuff} 的示例。听,据我所知,实际上只在 div 滚动时听。我正在寻找“如果 div x 在视口中,则将锚 X 设为红色。如果 div y 在视口中,则将锚 y 设为红色。”我是不是误会了?
      • 这篇文章:stackoverflow.com/questions/10555998/… 似乎表明可以使用 scrolltop,但我不是要更改 css,而是要添加一个类。此外,它需要与我当前使用的其他 onClick 脚本协同工作。
      猜你喜欢
      • 2019-08-10
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      相关资源
      最近更新 更多