我正在尝试使用each()
函数遍历divcaption
内部的每个caption-element
,获取captionin
、captionout
和delayout
属性,接下来captionout
属性中给出的该元素的removeClass
(不检查该类是否已添加(并addClass
到captionin
属性中给出的该元素。这很容易,而且效果很好。
接下来,我试图逆转从captionin
和captionout
属性中添加和删除类的整个过程,但这次是将它延迟delayout
属性中给定的时间量(通过使用setTimeout()
函数(。而且它不起作用。
整个 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,请在投反对票之前在评论中提问,谢谢:)
两个问题。
1- 范围。this
在不同的功能中this
不同。更多关于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