【问题标题】:How do I stop the scroll function when a selector is clicked?单击选择器时如何停止滚动功能?
【发布时间】:2018-03-18 13:18:05
【问题描述】:

当滚动到该页面上的相应部分时,导航中的各个父菜单项将突出显示。

现在,如果访问者决定单击父菜单项而不是滚动,则父菜单项不会正确突出显示,因为滚动功能会跟随并突出显示上一个父菜单项。

如何在 $('.nav a) 被点击后停止滚动功能?

jQuery(function($) {

  var services = $('.services').offset().top;
  var locations = $('.locations').offset().top;
  var about = $('.about').offset().top;
  var contact = $('.contact').offset().top;

  $(window).scroll(function() {
    var scrollPos = $(document).scrollTop();
    if (scrollPos >= services && scrollPos < locations) {
      $('.nav a').removeClass('active');
      $('.wsite-nav-2 a').addClass('active');
    } else if (scrollPos >= locations && scrollPos < about) {
      $('.nav a').removeClass('active');
      $('.wsite-nav-3 a').addClass('active');
    } else if (scrollPos >= about && scrollPos < contact) {
      $('.nav a').removeClass('active');
      $('.wsite-nav-4 a').addClass('active');
    } else if (scrollPos >= contact) {
      $('.nav a').removeClass('active');
      $('.wsite-nav-5 a').addClass('active');
    } else if (scrollPos <= services) {
      $('.nav a').removeClass('active');
      $('.wsite-nav-1 a').addClass('active');
    }
  });

  $('.wsite-nav-1 a').addClass('active');

  $('.nav a').click(function() {
    $('.nav a, .wsite-nav-1 a').removeClass('active');
    $(this).addClass('active');
  });

});
.active {
  background: #f0b823;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="nav">
  <ul>
    <li class="wsite-nav-1"><a href="#">Home</a></li>
    <li class="wsite-nav-2"><a href="#">Services</a></li>
    <li class="wsite-nav-3"><a href="#">Locations</a></li>
    <li class="wsite-nav-4"><a href="#">About</a></li>
    <li class="wsite-nav-5"><a href="#">Contact</a></li>
  </ul>
</div>

<div class="content">
  <div class="anchor">
    <a name="A" class="anchor-link services"></a>
  </div>
  <div class="anchor">
    <a name="B" class="anchor-link locations"></a>
  </div>
  <div class="anchor">
    <a name="C" class="anchor-link about"></a>
  </div>
  <div class="anchor">
    <a name="D" class="anchor-link contact"></a>
  </div>
</div>

【问题讨论】:

  • 快捷方式是声明一个标志变量,最初将其设置为false,如果为false,则继续检查滚动功能,点击切换为true

标签: jquery html css


【解决方案1】:

我可能会做这样的事情来快速修复。

var isClicked = false;

$(window).scroll(function() {

  if (isClicked) {
    return false;
  }

  var scrollPos = $(document).scrollTop();
  if (scrollPos >= services && scrollPos < locations) {
    $('.nav a').removeClass('active');
    $('.wsite-nav-2 a').addClass('active');
  } else if (scrollPos >= locations && scrollPos < about) {
    $('.nav a').removeClass('active');
    $('.wsite-nav-3 a').addClass('active');
  } else if (scrollPos >= about && scrollPos < contact) {
    $('.nav a').removeClass('active');
    $('.wsite-nav-4 a').addClass('active');
  } else if (scrollPos >= contact) {
    $('.nav a').removeClass('active');
    $('.wsite-nav-5 a').addClass('active');
  } else if (scrollPos <= services) {
    $('.nav a').removeClass('active');
    $('.wsite-nav-1 a').addClass('active');
  }
});

$('.wsite-nav-1 a').addClass('active');

$('.nav a').click(function() {
  isClicked = true;
  $('.nav a, .wsite-nav-1 a').removeClass('active');
  $(this).addClass('active');
});

更新:

这是这个问题的公认解决方案 - https://codepen.io/bb027/pen/VMQdXL

【讨论】:

  • 如此接近,@Blackburn027!我实现了你的建议,但是现在当我点击后滚动时,滚动功能不起作用。
  • 如何在 $('.nav a) 被点击后停止滚动功能?这是你的问题。
  • codepen.io/bb027/pen/VMQdXL 检查这个 sn-p 并让我知道您是否希望它这样工作
  • 不,你是对的——我最初的问题不够清楚。无论如何,您的第二个解决方案做到了!非常感谢您的宝贵时间,@BlackBurn027!
  • 很高兴我能帮上忙(y)
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
相关资源
最近更新 更多