如何在事件停止时停止slideUp和down继续运行

时间:2018-04-08 05:24:40

标签: javascript jquery

我有一个函数,如果scrollTop > 50显示div元素,如果小于100则隐藏它,但我的问题是当我尝试使用我的窗口滚动时像滚动一样快速上下滚动(比如5x)并立即停止,div元素仍然上下运行,如何防止这个问题继续运行?真的很感谢你的帮助。

$(document).ready(function() {

  $(document).scroll(function(e) {
    e.stopPropagation();
    if ($(this).scrollTop() > 50) {
      $(".head").slideDown();
    } else {
      $(".head").slideUp();
    }
  });

});
.head {
  display: none;
  height: 50px;
  width: 100%;
  position: fixed;
  top: 0;
  background: red;
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <script src="https://code.jquery.com/jquery-1.9.1.js"></script>
  <title></title>
</head>

<body>
  <div class="head"></div>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse posuere dui a nisl malesuada, eget sodales tellus faucibus. Duis malesuada in nunc a sodales. Cras laoreet rhoncus dolor ac iaculis. Vivamus dignissim, elit sit amet molestie interdum,
    leo mi hendrerit augue, ac ullamcorper tortor libero eget dui. Morbi blandit nulla iaculis, suscipit metus ac, sodales enim. Etiam rhoncus dolor non dui facilisis mollis. In fringilla pellentesque erat, eget vestibulum ex bibendum non. Mauris ac orci
    sit amet ligula luctus vulputate. Sed at maximus quam. Vivamus maximus ultrices condimentum. Nulla mattis, sapien in ultricies aliquam, ante orci rhoncus tellus, vel euismod dolor ante tempus magna. Suspendisse potenti. Vestibulum a diam a dolor vestibulum
    faucibus id sit amet neque. Ut fringilla neque malesuada pellentesque tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ut lacinia lectus, ultrices fringilla felis. Donec nunc enim, rutrum ac ullamcorper
    a, lacinia et ante. Sed feugiat nisl in luctus tincidunt. Proin accumsan metus vitae tincidunt laoreet. Curabitur posuere, magna quis venenatis egestas, lorem orci accumsan ipsum, tristique posuere magna ante at elit. Nullam sagittis semper hendrerit.
    Nunc tempus lobortis risus eu dictum. Nullam molestie dui non eleifend placerat. Nunc at est porta, scelerisque eros nec, bibendum turpis. Duis et sagittis ex, sed euismod justo. In malesuada imperdiet enim, vitae volutpat eros. In porta diam at justo
    volutpat fringilla. Nam sit amet metus sit amet odio gravida convallis pharetra id metus. Nunc ultrices, felis ut sagittis dignissim, ex urna consequat ipsum, sit amet venenatis est orci non risus. Lorem ipsum dolor sit amet, consectetur adipiscing
    elit. Suspendisse posuere dui a nisl malesuada, eget sodales tellus faucibus. Duis malesuada in nunc a sodales. Cras laoreet rhoncus dolor ac iaculis. Vivamus dignissim, elit sit amet molestie interdum, leo mi hendrerit augue, ac ullamcorper tortor
    libero eget dui. Morbi blandit nulla iaculis, suscipit metus ac, sodales enim. Etiam rhoncus dolor non dui facilisis mollis. In fringilla pellentesque erat, eget vestibulum ex bibendum non. Mauris ac orci sit amet ligula luctus vulputate. Sed at maximus
    quam. Vivamus maximus ultrices condimentum. Nulla mattis, sapien in ultricies aliquam, ante orci rhoncus tellus, vel euismod dolor ante tempus magna. Suspendisse potenti. Vestibulum a diam a dolor vestibulum faucibus id sit amet neque. Ut fringilla
    neque malesuada pellentesque tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ut lacinia lectus, ultrices fringilla felis. Donec nunc enim, rutrum ac ullamcorper a, lacinia et ante. Sed feugiat
    nisl in luctus tincidunt. Proin accumsan metus vitae tincidunt laoreet. Curabitur posuere, magna quis venenatis egestas, lorem orci accumsan ipsum, tristique posuere magna ante at elit. Nullam sagittis semper hendrerit. Nunc tempus lobortis risus
    eu dictum. Nullam molestie dui non eleifend placerat. Nunc at est porta, scelerisque eros nec, bibendum turpis. Duis et sagittis ex, sed euismod justo. In malesuada imperdiet enim, vitae volutpat eros. In porta diam at justo volutpat fringilla. Nam
    sit amet metus sit amet odio gravida convallis pharetra id metus. Nunc ultrices, felis ut sagittis dignissim, ex urna consequat ipsum, sit amet venenatis est orci non risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse posuere
    dui a nisl malesuada, eget sodales tellus faucibus. Duis malesuada in nunc a sodales. Cras laoreet rhoncus dolor ac iaculis. Vivamus dignissim, elit sit amet molestie interdum, leo mi hendrerit augue, ac ullamcorper tortor libero eget dui. Morbi blandit
    nulla iaculis, suscipit metus ac, sodales enim. Etiam rhoncus dolor non dui facilisis mollis. In fringilla pellentesque erat, eget vestibulum ex bibendum non. Mauris ac orci sit amet ligula luctus vulputate. Sed at maximus quam. Vivamus maximus ultrices
    condimentum. Nulla mattis, sapien in ultricies aliquam, ante orci rhoncus tellus, vel euismod dolor ante tempus magna. Suspendisse potenti. Vestibulum a diam a dolor vestibulum faucibus id sit amet neque. Ut fringilla neque malesuada pellentesque
    tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ut lacinia lectus, ultrices fringilla felis. Donec nunc enim, rutrum ac ullamcorper a, lacinia et ante. Sed feugiat nisl in luctus tincidunt. Proin
    accumsan metus vitae tincidunt laoreet. Curabitur posuere, magna quis venenatis egestas, lorem orci accumsan ipsum, tristique posuere magna ante at elit. Nullam sagittis semper hendrerit. Nunc tempus lobortis risus eu dictum. Nullam molestie dui non
    eleifend placerat. Nunc at est porta, scelerisque eros nec, bibendum turpis. Duis et sagittis ex, sed euismod justo. In malesuada imperdiet enim, vitae volutpat eros. In porta diam at justo volutpat fringilla. Nam sit amet metus sit amet odio gravida
    convallis pharetra id metus. Nunc ultrices, felis ut sagittis dignissim, ex urna consequat ipsum, sit amet venenatis est orci non risus.
  </p>
</body>

</html>

1 个答案:

答案 0 :(得分:1)

您可以使用setTimeout功能阻止动画在每次用户向上或向下滚动时添加到动画队列中,并在短暂延迟后仅为动画制作动画:

&#13;
&#13;
$(document).ready(function() {
  let timer;
  $(document).scroll(function(e) {
    e.stopPropagation();
    if (timer) clearTimeout(timer);
    timer = setTimeout(() => {
      if ($(this).scrollTop() > 50) {
         $(".head").slideDown();
      } else {
        $(".head").slideUp();
      }
    }, 100);
  });

});
&#13;
.head {
  display: none;
  height: 50px;
  width: 100%;
  position: fixed;
  top: 0;
  background: red;
}
&#13;
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <script src="https://code.jquery.com/jquery-1.9.1.js"></script>
  <title></title>
</head>

<body>
  <div class="head"></div>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse posuere dui a nisl malesuada, eget sodales tellus faucibus. Duis malesuada in nunc a sodales. Cras laoreet rhoncus dolor ac iaculis. Vivamus dignissim, elit sit amet molestie interdum,
    leo mi hendrerit augue, ac ullamcorper tortor libero eget dui. Morbi blandit nulla iaculis, suscipit metus ac, sodales enim. Etiam rhoncus dolor non dui facilisis mollis. In fringilla pellentesque erat, eget vestibulum ex bibendum non. Mauris ac orci
    sit amet ligula luctus vulputate. Sed at maximus quam. Vivamus maximus ultrices condimentum. Nulla mattis, sapien in ultricies aliquam, ante orci rhoncus tellus, vel euismod dolor ante tempus magna. Suspendisse potenti. Vestibulum a diam a dolor vestibulum
    faucibus id sit amet neque. Ut fringilla neque malesuada pellentesque tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ut lacinia lectus, ultrices fringilla felis. Donec nunc enim, rutrum ac ullamcorper
    a, lacinia et ante. Sed feugiat nisl in luctus tincidunt. Proin accumsan metus vitae tincidunt laoreet. Curabitur posuere, magna quis venenatis egestas, lorem orci accumsan ipsum, tristique posuere magna ante at elit. Nullam sagittis semper hendrerit.
    Nunc tempus lobortis risus eu dictum. Nullam molestie dui non eleifend placerat. Nunc at est porta, scelerisque eros nec, bibendum turpis. Duis et sagittis ex, sed euismod justo. In malesuada imperdiet enim, vitae volutpat eros. In porta diam at justo
    volutpat fringilla. Nam sit amet metus sit amet odio gravida convallis pharetra id metus. Nunc ultrices, felis ut sagittis dignissim, ex urna consequat ipsum, sit amet venenatis est orci non risus. Lorem ipsum dolor sit amet, consectetur adipiscing
    elit. Suspendisse posuere dui a nisl malesuada, eget sodales tellus faucibus. Duis malesuada in nunc a sodales. Cras laoreet rhoncus dolor ac iaculis. Vivamus dignissim, elit sit amet molestie interdum, leo mi hendrerit augue, ac ullamcorper tortor
    libero eget dui. Morbi blandit nulla iaculis, suscipit metus ac, sodales enim. Etiam rhoncus dolor non dui facilisis mollis. In fringilla pellentesque erat, eget vestibulum ex bibendum non. Mauris ac orci sit amet ligula luctus vulputate. Sed at maximus
    quam. Vivamus maximus ultrices condimentum. Nulla mattis, sapien in ultricies aliquam, ante orci rhoncus tellus, vel euismod dolor ante tempus magna. Suspendisse potenti. Vestibulum a diam a dolor vestibulum faucibus id sit amet neque. Ut fringilla
    neque malesuada pellentesque tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ut lacinia lectus, ultrices fringilla felis. Donec nunc enim, rutrum ac ullamcorper a, lacinia et ante. Sed feugiat
    nisl in luctus tincidunt. Proin accumsan metus vitae tincidunt laoreet. Curabitur posuere, magna quis venenatis egestas, lorem orci accumsan ipsum, tristique posuere magna ante at elit. Nullam sagittis semper hendrerit. Nunc tempus lobortis risus
    eu dictum. Nullam molestie dui non eleifend placerat. Nunc at est porta, scelerisque eros nec, bibendum turpis. Duis et sagittis ex, sed euismod justo. In malesuada imperdiet enim, vitae volutpat eros. In porta diam at justo volutpat fringilla. Nam
    sit amet metus sit amet odio gravida convallis pharetra id metus. Nunc ultrices, felis ut sagittis dignissim, ex urna consequat ipsum, sit amet venenatis est orci non risus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse posuere
    dui a nisl malesuada, eget sodales tellus faucibus. Duis malesuada in nunc a sodales. Cras laoreet rhoncus dolor ac iaculis. Vivamus dignissim, elit sit amet molestie interdum, leo mi hendrerit augue, ac ullamcorper tortor libero eget dui. Morbi blandit
    nulla iaculis, suscipit metus ac, sodales enim. Etiam rhoncus dolor non dui facilisis mollis. In fringilla pellentesque erat, eget vestibulum ex bibendum non. Mauris ac orci sit amet ligula luctus vulputate. Sed at maximus quam. Vivamus maximus ultrices
    condimentum. Nulla mattis, sapien in ultricies aliquam, ante orci rhoncus tellus, vel euismod dolor ante tempus magna. Suspendisse potenti. Vestibulum a diam a dolor vestibulum faucibus id sit amet neque. Ut fringilla neque malesuada pellentesque
    tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras ut lacinia lectus, ultrices fringilla felis. Donec nunc enim, rutrum ac ullamcorper a, lacinia et ante. Sed feugiat nisl in luctus tincidunt. Proin
    accumsan metus vitae tincidunt laoreet. Curabitur posuere, magna quis venenatis egestas, lorem orci accumsan ipsum, tristique posuere magna ante at elit. Nullam sagittis semper hendrerit. Nunc tempus lobortis risus eu dictum. Nullam molestie dui non
    eleifend placerat. Nunc at est porta, scelerisque eros nec, bibendum turpis. Duis et sagittis ex, sed euismod justo. In malesuada imperdiet enim, vitae volutpat eros. In porta diam at justo volutpat fringilla. Nam sit amet metus sit amet odio gravida
    convallis pharetra id metus. Nunc ultrices, felis ut sagittis dignissim, ex urna consequat ipsum, sit amet venenatis est orci non risus.
  </p>
</body>

</html>
&#13;
&#13;
&#13;

相关问题