停止 jquery 函数在鼠标悬停时淡入淡出

Stop jquery function fade on mouseover

我有这样的 html 代码:

<div id="principal">
    <div id="quote1"> 1 Div </div>
    <div id="quote2"> 2 Div </div>
</div> 

fadein/fadeout 那些 "quote" div 的循环函数:

  jQuery(function () {
    var $els = $('div[id^=quote]'),
        i = 0,
        len = $els.length;

        $els.slice(1).hide();
        setInterval(function () {
            $els.eq(i).fadeOut(function () {
                i = (i + 1) % len
                $els.eq(i).fadeIn();
            })
        }, 4000) 
    })

问题是:我想在 "Principal" div 上停止鼠标悬停时的 fadeIn/fadeOut 动画和 return 鼠标离开时的动画。 我怎样才能停止动画并冻结实际的 div?

您可以使用 class 来确定间隔何时出现中断。通过在悬停和悬停时添加和删除它,间隔可以检查元素是否具有 class 。如果他们有class,则跳过该间隔的操作。

jQuery(function() {
  var $els = $('div[id^=quote]'),
    i = 0,
    len = $els.length;

  $els.slice(1).hide();

  setInterval(function() {
    if (!$els.hasClass('pause')) {
      $els.eq(i).fadeOut(function() {
        i = (i + 1) % len
        $els.eq(i).fadeIn();
      });
    }
  }, 2000);

  $els.on('mouseenter', function() {
    $els.addClass('pause')
  });
  $els.on('mouseleave', function() {
    $els.removeClass('pause')
  });
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="principal">
  <div id="quote1"> 1 Div </div>
  <div id="quote2"> 2 Div </div>
</div>