Jquery语句崩溃

Jquery Statements Crashing

本文关键字:崩溃 语句 Jquery      更新时间:2024-05-15

当目标值为true时,我使用jquery来制作数字动画。但当值为true甚至为false时,我的导航jquery-else语句代码会因为某种原因停止工作,我不知道为什么。我想我在这两个语句中都使用了"offset"。

我的html动画数字

 <div class="container" id="counter">
    <div class="row text-center">
      <div class="col-lg-12">
        <h3 class="dark-blue">SOME FACTS ABOUT US WHAT WE ARE</h3>
      </div>
       <div class="col-lg-12 top-spacing">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu tellus a nulla rhoncus imperdiet.<br/> Vestibulum quis dictum leo.Curabitur viverra sagittis velit non fringilla. Etiam sed fringilla risus, vel dapibus nisi.</p>
      </div>
    </div>
    <div class="row text-center content top-spacing">
      <div class="col-lg-3">
        <i class="fa fa-bicycle fa-5x color-red"></i>
        <h3 id="bike" class="countdown">0</h3>
        <h3 class="blog-item">Km ride bike</h3>
      </div>
      <div class="col-lg-3">
        <i class="fa fa-coffee fa-5x color-red"></i>
        <h3 id="coffee" class="countdown">0</h3>
        <h3 class="blog-item">Cups of coffee</h3>
      </div>
      <div class="col-lg-3">
        <i class="fa fa-line-chart fa-5x color-red"></i>
        <h3 id="projects" class="countdown">0</h3>
        <h3 class="blog-item">Projects Completed</h3>
      </div>
      <div class="col-lg-3">
        <i class="fa fa-user fa-5x color-red"></i>
        <h3 id="users" class="countdown">0</h3>
        <h3 class="blog-item">Users Satisfied</h3>
      </div>
    </div><br/><br/><br/>
  </div>

动画数字的Js

var target = $("#counter").offset().top-$(window).height();
$(document).on('scroll', function() {
    if ($(window).scrollTop() > target) {
        $('#bike').animateNumber({ number: 165 },5000);
        $('#coffee').animateNumber({ number: 2165 },5000);
        $('#projects').animateNumber({ number: 385 },5000);
        $('#users').animateNumber({ number: 315 },5000);
        $(this).off('scroll');
    }
});

我的导航html

 <nav class="navbar navbar-default navbar-fixed-top">
    <div class="container-fluid">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
          <span class="sr-only">Toggle navigation</span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand-font-size navbar-brand" href="#">Aston</a>
      </div>
      <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
        <ul class="nav navbar-nav navbar-right">
          <li><a href="#">About</a></li>
          <li><a href="#">Projects</a></li>
          <li><a href="#">Clients</a></li>
          <li><a href="#">Team</a></li> 
          <li><a href="#">Blog</a></li>
          <li><a href="#">Contact</a></li> 
        </ul>
      </div><!-- /.navbar-collapse -->
    </div><!-- /.container-fluid -->
  </nav>

Jquery 的CSS

.navbar-default.scrolled{
  background-color: #fff;
  border-bottom: 1px solid #BBB9BE;
  box-shadow: 0,0,2px,#BBB9BE;
}
.navbar-default {
  background-color: transparent;
  border:none;
  -webkit-transition: background-color 700ms linear;
  -moz-transition: background-color 700ms linear;
  -o-transition: background-color 700ms linear;
  -ms-transition: background-color 700ms linear;
  transition: background-color 700ms linear;
}

导航的JS

  var a = $(".navbar-default").offset().top;
  $(document).scroll(function() {
   if ($(this).scrollTop() > 10) {
    $('.navbar-default').addClass("scrolled");
    $(".navbar-default .navbar-brand").css({
        "color": "#3F4474"
    });
    $(".navbar-default .navbar-toggle .icon-bar").css({
        "background-color": "#3F4474"
    });
   }
   else {
    $('.navbar-default').removeClass("scrolled");
    $(".navbar-default .navbar-brand").css({
        "color": "#fff"
    });
    $(".navbar-default .navbar-toggle .icon-bar").css({
        "background-color": "#fff"
    });
  }
 });

我只是想让导航回到它的原始位置,背景颜色是透明的。谢谢你的帮助!

您的问题是,与animateNumber()相关的当前代码依赖于$(this).off('scroll');来阻止数字的动画无限期地进行。您可能不明白$(this).off('scroll');是如何做到这一点的。

它通过在第一次调用代码后删除scroll处理程序来防止animateNumber()被反复调用。不幸的是,$(this).off('scroll');删除了所有绑定到documentscroll处理程序,包括修改导航栏的css 的处理程序

至少有两种方法可以解决此问题

  • 页面加载时不要绑定第二个处理程序,而是将第二个处理器放在函数中,并在删除第一个处理程序后调用它来绑定处理程序,如下jsfiddle所示
  • 或者(我喜欢的方法)将所有代码放在一个scroll函数中,并使用一个变量和一个if语句来防止animateNumber()的无限循环,如jsfiddle所示

这是第二种方法的jQuery:

  var a = $(".navbar-default").offset().top;
  var target = $("#counter").offset().top - $(window).height();
  var hasAnimated = false; // add this var
  $(document).on('scroll', function() {
      if ($(window).scrollTop() > target && !hasAnimated) { // check `hasAnimated` is false
          hasAnimated = true; // set to true, next time around this code wont be called
          $('#bike').animateNumber({
              number: 165
          }, 5000);
          $('#coffee').animateNumber({
              number: 2165
          }, 5000);
          $('#projects').animateNumber({
              number: 385
          }, 5000);
          $('#users').animateNumber({
              number: 315
          }, 5000);
      }
      if ($(this).scrollTop() > 10) {
          $('.navbar-default').addClass("scrolled");
          $(".navbar-default .navbar-brand").css({
              "color": "#3F4474"
          });
          $(".navbar-default .navbar-toggle .icon-bar").css({
              "background-color": "#3F4474"
          });
      } else {
          $('.navbar-default').removeClass("scrolled");
          $(".navbar-default .navbar-brand").css({
              "color": "#fff"
          });
          $(".navbar-default .navbar-toggle .icon-bar").css({
              "background-color": "#fff"
          });
        }
    });