在 JS 中循环遍历多个相同的标记块并执行相同的功能而不会受到干扰
Loop through multiple of same blocks of markup in JS and perform same function without interference
我希望淡入/淡出文本标签,其中给定块中一次只显示一个标签。标记是这样的:
<div class="subtitles">
<h3 class="subtitle" data-order="0">
label 1
</h3>
<h3 class="subtitle" data-order="1">
label 2
</h3>
<h3 class="subtitle" data-order="3">
label 3
</h3>
</div>
[repeat block nth number of times]
我可以循环遍历一组 javascript:
var divs = $('.subtitles').find('h3.subtitle');
divs.hide();
i = 0;
// fade h3s in / out
(function cycle() {
divs.eq(i).fadeIn(400)
.delay(1000)
.fadeOut(400, cycle);
i = ++i % 3;
})();
但是页面上的块多了,事情就变得混乱了。我如何遍历多个块并应用相同的行为?
尝试.each()
代码:
$('.subtitles').each(function() {$(this).find('h3.subtitle');$(this).hide()});
编辑:根据问题 OP,i
变量变得复杂,原因是 javascript 提升。请阅读此 link,了解
发生了什么
您需要封装函数中的所需行为,以便每组循环元素都有自己的偏移量。
function cycle($els) {
var i = 0;
$els.hide();
(function loop() {
$els.eq(i++).fadeIn(400)
.delay(1000)
.fadeOut(400, loop);
i %= $els.length;
})();
}
然后你可以使用.each
开始每组字幕独立循环:
$('.subtitles').each(function() {
cycle($(this).find('h3.subtitle'));
});
我希望淡入/淡出文本标签,其中给定块中一次只显示一个标签。标记是这样的:
<div class="subtitles">
<h3 class="subtitle" data-order="0">
label 1
</h3>
<h3 class="subtitle" data-order="1">
label 2
</h3>
<h3 class="subtitle" data-order="3">
label 3
</h3>
</div>
[repeat block nth number of times]
我可以循环遍历一组 javascript:
var divs = $('.subtitles').find('h3.subtitle');
divs.hide();
i = 0;
// fade h3s in / out
(function cycle() {
divs.eq(i).fadeIn(400)
.delay(1000)
.fadeOut(400, cycle);
i = ++i % 3;
})();
但是页面上的块多了,事情就变得混乱了。我如何遍历多个块并应用相同的行为?
尝试.each()
代码:
$('.subtitles').each(function() {$(this).find('h3.subtitle');$(this).hide()});
编辑:根据问题 OP,i
变量变得复杂,原因是 javascript 提升。请阅读此 link,了解
您需要封装函数中的所需行为,以便每组循环元素都有自己的偏移量。
function cycle($els) {
var i = 0;
$els.hide();
(function loop() {
$els.eq(i++).fadeIn(400)
.delay(1000)
.fadeOut(400, loop);
i %= $els.length;
})();
}
然后你可以使用.each
开始每组字幕独立循环:
$('.subtitles').each(function() {
cycle($(this).find('h3.subtitle'));
});