当前位置: 首页 > 知识库问答 >
问题:

Wordpress/jQuery:当div在滚动视口中时,高亮显示匹配的锚

平山
2023-03-14

我目前正在尝试为Wordpress网站实现一个菜单,其标准如下:

  1. 当用户向下滚动页面并到达锚定div(在菜单中链接)时,菜单中的链接应使类“活动”。

以下是该页面的HTML:

<nav class="sub-navigation">
<ul class="secondary-link">
<li><a href="#team"><span>Team</span></a></li>
<li><a href="#guidelines"><span>Guidelines</span></a></li>
<li><a href="#clients"><span>Clients</span></a></li>
</ul>
</nav>

下面的代码几乎可以工作-但是,它抛出以下错误:

未捕获错误:语法错误,无法识别的表达式:http://domain.com/not-the-current-page

jQuery(document).ready(function() {
 
  jQuery(document).on("scroll", onScroll);
  jQuery('.secondary-link a').click(function(event) {
    event.preventDefault();
    jQuery(document).off("scroll");
    var link = this; 
    jQuery.smoothScroll({
      offset: -100,
      speed: 1000,
      scrollTarget: link.hash
    });
  });
  jQuery('.secondary-link a').click(function(){
    jQuery('.secondary-link a').removeClass('active');
    jQuery(this).addClass('active');
    jQuery(document).on("scroll", onScroll);
  });

  function onScroll(event){
    var scrollPos = jQuery(document).scrollTop();
    jQuery('.secondary-link a').each(function () {
        var currLink = jQuery(this);
        var refElement = jQuery(currLink.attr('href'));
        if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
            jQuery('.secondary-link a').removeClass("active");
            currLink.addClass("active");
        }
        else{
            currLink.removeClass("active");
        }
    });
  }
});

逻辑如下:

  1. 收听滚动并相应地添加“活动”类。
  2. 单击链接后,停止(1),滚动至锚定,添加类“活动”,然后继续(1)

这是我第一次使用jQuery。我希望你们中的一位能为我指明正确的方向,让我知道如何正确地工作。非常感谢你的帮助!

共有1个答案

戎俊
2023-03-14

最终找出了问题所在:

  1. 菜单包含一个不是锚的链接,因此错误未捕获错误:语法错误,未识别的表达式:http://domain.com/not-the-current-page

解决此问题后,出现另一个错误:

Uncaught TypeError: Cannot read property 'top' of undefined

我按照这里的逻辑摆脱了这个

基本上,在获取jQuery对象的偏移量之前,我必须检查它是否包含任何元素。

用于链接高亮显示和平滑滚动的jQuery代码现在如下所示:

 jQuery(document).ready(function() {
  jQuery(document).on("scroll", onScroll);
  jQuery('.secondary-link a').click(function(event) {
    event.preventDefault();
    jQuery(document).off("scroll");
    var link = this;
    jQuery.smoothScroll({
      offset: -100,
      speed: 1000,
      scrollTarget: link.hash
    });
  });

  jQuery('.secondary-link a').click(function(){
    jQuery(document).off("scroll");
    jQuery('.secondary-link a').removeClass('active');
    jQuery(this).addClass('active');
    jQuery(document).on("scroll", onScroll);
  });

  function onScroll(event){
    var scrollPos = jQuery(document).scrollTop();
    jQuery('.secondary-link a').each(function () {
        var currLink = jQuery(this);
        var refElement = jQuery(currLink.attr('href'));
        if (refElement.length) {
        if (refElement.position().top-100 <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
            jQuery('.secondary-link a').removeClass("active");
            currLink.addClass("active");
        }
        else{
            currLink.removeClass("active");
        }
        }
    });
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
 类似资料:
  • 问题内容: 该站点使用一个向下滚动的大页面。当您向下滚动并传递不同的部分时,当相应的div出现时,左侧的菜单导航会将css类更改为“当前”。 我猜想这可以通过jQuery使用$(window).height();来完成。 我对jQuery很陌生,我想写的是这样的东西(用外行术语): 获取浏览器窗口的高度–如果div#content1从顶部到顶部100px,和/或从底部到底部200px,将更改菜单a

  • 我希望禁用高亮显示出现,但保留高亮显示匹配标记。当我设置cercepenceshighlight:false时,它停止高亮显示事件,但同时停止高亮显示开始和结束标记。

  • 本文向大家介绍jQuery实现高亮显示的方法,包括了jQuery实现高亮显示的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery实现高亮显示的方法。分享给大家供大家参考。具体如下: 主要功能代码如下: 使用时设置on的css高亮部分样式即可。 希望本文所述对大家的jQuery程序设计有所帮助。

  • 我使用的是vanilla JavaScript,我想找出一种隐藏div容器的方法,但是当用户滚动到div容器的50%时,就是div完全可见的时候。有点像渐变效应。这是我目前所掌握的: null null

  • 本文向大家介绍jQuery实现当前页面标签高亮显示的方法,包括了jQuery实现当前页面标签高亮显示的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery实现当前页面标签高亮显示的方法。分享给大家供大家参考。具体实现方法如下: 用法如下: 希望本文所述对大家的jQuery程序设计有所帮助。

  • 问题内容: 我正在制作一个FAQ页面,顶部有一些按钮可以跳转到一个类别(它跳转到我用作类别标签的标签,例如,用于我的常规类别)。我想添加一个滚动效果,而不仅仅是跳到该类别。我想要类似http://www.dynamicdrive.com/dynamicindex3/scrolltop.htm的内容,该内容可以滚动到页面的所需部分。该链接是一个脚本,该脚本转到页面顶部,具有良好的滚动效果。我需要类似