简体   繁体   English

setInterval函数内的计数器变量不起作用

[英]counter variable inside a setInterval function doesn't work

I have set one scroll-counter variable(it counts the number of scroll occured) inside the setInterval function which increases by 1 every-time the setInterval function is executed(the setInterval function runs 20 times and stops) and its value is displayed in the page. 我在setInterval函数中设置了一个滚动计数器变量(它计算了滚动的数量),每次执行setInterval函数时它会增加1(setInterval函数运行20次并停止),其值显示在页。 But the value immediately gets to maximum even before all the setInterval functions are completed executing. 但是,即使在所有setInterval函数执行完毕之前,该值也会立即达到最大值。

I am sorry if it's a bad explanation, hope this code clears my question. 如果这是一个糟糕的解释,我很抱歉,希望这段代码能够解决我的问题。

 $(document).ready(function() { var pagePos = 0; var point = 0; $(".nav-btn").click(function() { var intervalid = setInterval(function() { pagePos = pagePos + 200; $('body,html').animate({ scrollTop: +pagePos }, 500); point = point + 1; $('.scroll-count').text("Scroll count: " + point); if (pagePos >= 4000) { clearInterval(intervalid); point = 0; pagePos = 0; } }, 50); }); }); 
 body { margin: 0; } .nav-class { border: 1px solid transparent; background-color: greenyellow; border-radius: 3px; height: 50px; padding: 20px; text-align: center; } .nav-btn { background-color: bisque; border: none; cursor: pointer; width: 5em; height: 2em; border-radius: 3px; font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif; } .nav-btn:hover { border: 2px solid rgb(76, 0, 255); } .inner-div-class { border: 1px solid rebeccapurple; height: 300px; } .div-class>div:nth-child(odd) { background-color: violet; } .div-class>div:nth-child(even) { background-color: palegreen; } .scroll-count { position: fixed; top: 85%; left: 1em; color: white; font-size: 2em; text-shadow: 2.5px 1.5px 0px #000; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Jquery auto scroll</title> </head> <body> <nav class="nav-class"> <button class="nav-btn"> Click </button><span style="font-family:'Lucida Sans', 'Lucida Sans Regular', 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif"> to start scrolling</span> </nav> <div class="div-class"> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> <div class="inner-div-class"></div> </div> <div class="scroll-count"> Scroll count: </div> </body> </html> 

$(document).ready(function() {
  var pagePos = 0;
  var point = 0;

  $(".nav-btn").click(function() {
    var intervalid = setInterval(function() {
      pagePos = pagePos + 200;
      $('body,html').animate({
        scrollTop: +pagePos
      }, 500);
      point = point + 1;
      $('.scroll-count').text("Scroll count: " + point);
      if (pagePos >= 4000) {
        clearInterval(intervalid);
        point = 0;
        pagePos = 0;
      }
    }, 500); <HERE

  });
});

Change the 50 interval to 500 将50间隔更改为500

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM