当前位置: 首页 > 知识库问答 >
问题:

jQuery动画应该在悬停时暂停

陆雅志
2023-03-14

这是我的代码:

null

var animationDuration = 3000;

var firstText = $(".text:first-child");
var currentText = firstText;

function changeText() {
  $(currentText).css("display", "none");
  var NextText = currentText.next(".text");
  if (!NextText.length) NextText = firstText;
  $(NextText).css("display", "block");
  currentText = NextText;
}

var loopTimer = setInterval(changeText, animationDuration);

$('.animatedText').hover(function(e) {
  clearInterval(loopTimer);
}, function(e) {
  changeText();
  loopTimer = setInterval(changeText, animationDuration);
})
css prettyprint-override">.text {
  display: none;
  white-space: pre-wrap;
  font-size: 30px;
  cursor: default;
}

.text:nth-child(1) {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<section class="animatedText">
  <div class="text">One</div>
  <div class="text">Two</div>
  <div class="text">Three</div>
  <div class="text">Four</div>
</section>

null

目前,动画似乎暂停悬停,但如果你取消悬停,你可以看到总是突然显示下一个div。所以它并不是真正的“暂停”,它只是停止然后显示下一个div。持续时间丢失。

怎么可能修复呢?

会非常感谢你的帮助!

共有2个答案

长孙章横
2023-03-14

像这样的?

null

$(function() {
  var counter = 0,
    divs = $(".text"),
    divsN = divs.length,
    intv;

  function showDiv() {
    divs.hide().eq(counter++ % divsN).show();
  }
  showDiv();

  function auto() {
    clearInterval(intv);
    intv = setInterval(function() {
      showDiv();
    }, 2000);
  }
  auto();
  divs.on("mouseenter mouseleave", function(e) {
    var evt = e.type == "mouseenter" ? clearInterval(intv) : auto();
  });
});
.text {
  display: none;
  white-space: pre-wrap;
  font-size: 30px;
  cursor: default;
}

.text:nth-child(1) {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section class="animatedText">
  <div class="text">One</div>
  <div class="text">Two</div>
  <div class="text">Three</div>
  <div class="text">Four</div>
</section>
孙鑫鹏
2023-03-14

运行函数changeText()进行反向悬停时犯了一个小错误。这里:

function(e) {
   changeText();
   loopTimer = setInterval(changeText, animationDuration);
}) 

这样就得到了函数的二次启动。

只需删除此函数运行,您将得到所需的结果。因为您已经运行了此函数changeText():

loopTimer = setInterval(changeText, animationDuration);

null

var animationDuration = 3000;

var firstText = $(".text:first-child");
var currentText = firstText;

function changeText() {
  $(currentText).css("display", "none");
  var NextText = currentText.next(".text");
  if (!NextText.length) NextText = firstText;
  $(NextText).css("display", "block");
  currentText = NextText;
}

var loopTimer = setInterval(changeText, animationDuration);

$('.animatedText').hover(function(e) {
  clearInterval(loopTimer);
}, function(e) {
  loopTimer = setInterval(changeText, animationDuration);
})
.text {
  display: none;
  white-space: pre-wrap;
  font-size: 30px;
  cursor: default;
}

.text:nth-child(1) {
  display: block;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<section class="animatedText">
  <div class="text">One</div>
  <div class="text">Two</div>
  <div class="text">Three</div>
  <div class="text">Four</div>
</section>
 类似资料:
  • 问题内容: 当您将鼠标悬停在某个元素上时,我会旋转它。悬停时,动画将停止。简单: 但是,当您将鼠标悬停时,动画会突然停止,恢复为0度。我想重新设置动画位置,但是在语法设计上遇到了一些麻烦。 任何输入都会很棒! 问题答案: 解决方案是在.elem中设置默认值。但是此动画可以与-moz一起正常使用,但尚未在-webkit中实现 它可以在Firefox上正常运行,但不能在Chrome上运行

  • 主要内容:实例,jQuery stop() 方法,实例jQuery stop() 方法用于在动画或效果完成前对它们进行停止。 停止滑动 时间是宝贵的,因此,我们为您提供快捷易懂的学习内容。 在这里,您可以通过一种易懂的便利的模式获得您需要的任何知识。 实例 jQuery stop() 滑动 演示 jQuery stop() 方法。 jQuery stop() 动画(带参数) 演示 jQuery stop() 方法 jQuery stop() 方法 j

  • 我有一个动画块来执行一个简单的基于变换的动画,在完成时从它的超级视图中删除有问题的视图。 然后我使用Tech Q详述的代码 但是,此代码不会阻止完成代码的执行。因此,为了防止代码执行,我将完成代码更改为: 当检查finished==TRUE时,动画块暂停时,将阻止执行完成代码。如果在“取消暂停”动画之前超过持续时间,则不会执行完成代码。即在本例中,msgView仍保留在superview中。 是否

  • 我有一个场景,其中有“mouseEnter”对象触发其他对象的动作: 这是hoverbox Mixin: 和附加的javascript: 当用户悬停'hoverbox'球体时,这将触发元素的重新定位。当光标离开Hoverbox时,它还触发返回到其正常位置。 cursor元素如下所示: 因此它不会在其他对象上发出事件。 然而,这种行为有点不正常。有时,当光标离开球体时,'hoveroff'事件不会被

  • 本文向大家介绍如何在鼠标悬停时使用jQuery动画化背景颜色的变化?,包括了如何在鼠标悬停时使用jQuery动画化背景颜色的变化?的使用技巧和注意事项,需要的朋友参考一下 若要更改背景颜色,请使用mouseenter事件。放置鼠标光标时背景色发生变化: 鼠标光标放在以下元素上: 您可以尝试运行以下代码,以了解如何为鼠标悬停时的背景色变化设置动画: 示例

  • 可能会有暂停应用的需求,那这里给做了一个。 实现非常简单,就是对容器的启动使用做了一个Sleep 当然还有另一种方案是将 replace 设置为 0