【问题标题】:How to pass currently iterated element (this) into setTimeout inside .each() function?如何将当前迭代的元素(this)传递给.each()函数内的setTimeout?
【发布时间】:2017-12-31 22:25:32
【问题描述】:

我正在尝试使用each() 函数遍历caption div 中的每个caption-element,获取captionincaptionoutdelayout 属性,下一个removeClass 中给出的那个元素在@987654328 @ 属性(不检查是否已经添加了类)和addClasscaptionin 属性中给出的那个元素。这很简单,而且效果很好。

接下来我试图扭转添加和删除从captionincaptionout 属性中获取的类的整个过程,但这次将其延迟delayout 属性中给出的时间量(通过使用@987654334 @ 功能)。而且它不起作用。

整个 ide 是为每个迭代的元素提供它自己的 setTimeout 延迟,该延迟取自 delayout 属性。

非常感谢为一个完整的菜鸟提供的每一个帮助:)

HTML:

<div class="caption">
    <div id="1" class="caption-container">
          <h1 class="caption-element animated" captionin="fadeInUp" captionout="bounceOut" delayout="2000">Caption 1</h1>
    </div>
    <div id="2" class="caption-container">
          <h1 class="caption-element animated" captionin="swing" captionout="fadeOutDown" delayout="4000">Caption 2</h1>
          <h1 class="caption-element animated" captionin="bounceInUp" captionout="lightSpeedOut" delayout="3000">Caption 2</h1>
    </div>
    <div id="3" class="caption-container">
          <h1 class="caption-element animated" captionin="bounceInUp" captionout="rotateOutUpLeft" delayout="2500">Caption 3</h1>
    </div>
</div>

jQuery

jQuery('.caption .caption-element').each(function () {
        var captionin = jQuery(this).attr('captionin');
        var captionout = jQuery(this).attr('captionout');
        var delayout = jQuery(this).attr('delayout');
        jQuery(this).removeClass(captionout).addClass(captionin);
        setTimeout(function () {
                jQuery(this).removeClass(captionin).addClass(captionout);
        }, delayout, captionin, captionout);
});

PS,请在投反对票前在评论中提问,谢谢:)

【问题讨论】:

  • 也许您可以多解释一下这段代码的作用?目标是什么,你想做什么 => 作为一个功能。
  • @Joraid 我正在尝试遍历 'caption' DIV 中的每个 'caption-element',获取它的 captionincaptionoutdelayout 属性,然后删除并添加类 ot当前使用'captionin'和'captionout'迭代的元素,然后在delayout给出的延迟后执行删除和添加类的相反过程。希望能帮助到你。谢谢。
  • 我的意思是,你为什么要这样做?设计视角。
  • 我正在尝试为滑块制作字幕,使其在不同时间消失。除了不同的动画时间之外,所有内容都已排序。

标签: jquery variables each settimeout


【解决方案1】:

两个问题。

1- 范围。 this 在不同的功能中是不一样的thisMore about this。我通过在变量中捕获JQuery(this) 并在代码中使用它来解决这个问题。因此,当我想从代码中的其他位置访问所选元素 $elem 时,这不会让我感到惊讶。

2- 我假设setTimeout 需要一个数字作为时间单位的值。您正在传递一个字符串。

jQuery('.caption .caption-element').each(function() {
  var $elem = jQuery(this);


  var captionin = $elem.attr('captionin');
  var captionout = $elem.attr('captionout');
  var delayout = $elem.attr('delayout');

  console.log("Before: " + $elem.attr("class"));
  $elem.removeClass(captionout).addClass(captionin);

  setTimeout(function(captionin, captionout) {

    $elem.removeClass(captionin).addClass(captionout);
    console.log("After:" + $elem.attr("class"));

  }, Number(delayout), captionin, captionout);
});
<script src="https://code.jquery.com/jquery-2.0.3.js"></script>
<div class="caption">
  <div id="1" class="caption-container">
    <h1 class="caption-element animated" captionin="fadeInUp" captionout="bounceOut" delayout="2000">Caption 1</h1>
  </div>
  <div id="2" class="caption-container">
    <h1 class="caption-element animated" captionin="swing" captionout="fadeOutDown" delayout="4000">Caption 2</h1>
    <h1 class="caption-element animated" captionin="bounceInUp" captionout="lightSpeedOut" delayout="3000">Caption 2</h1>
  </div>
  <div id="3" class="caption-container">
    <h1 class="caption-element animated" captionin="bounceInUp" captionout="rotateOutUpLeft" delayout="2500">Caption 3</h1>
  </div>
</div>

结果:

Before: caption-element animated
Before: caption-element animated
Before: caption-element animated
Before: caption-element animated
After:caption-element animated bounceOut
After:caption-element animated rotateOutUpLeft
After:caption-element animated lightSpeedOut
After:caption-element animated fadeOutDown

【讨论】:

  • 是的,实际上我在你发布这个答案之前就自己做了,唯一的区别是我添加了var $this = this,然后在setTimeout中传递了jQuery($this)...,但效果是一样的。并且将delayoutas 传递给 setTimeout 可以在没有类型杂耍的情况下工作。我显然接受你的回答。非常感谢您的努力!最好的问候。
  • 因此解决方案同时降临在我们身上。有时你需要大声说出来才能看到它。并且总是 console.log out 看看发生了什么。祝你好运。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 2016-07-20
  • 1970-01-01
相关资源
最近更新 更多