仅显示数组中的最后一项
Shows only the last item in the array
我有一个 jQuery 代码,如下所示。
我想遍历整个阵列 - 显示一条消息 5 秒,然后转到下一条并显示 5 秒,然后继续下一条。
问题是它只显示最后一项 - "Four".
<script>
$(function(){
var myTab = ['One', 'Two', 'Three', 'Four']
$(myTab).each(function(i, elem){
$('#showHere').text(elem).fadeIn('slow').delay(5000).fadeOut('slow');
})
});
</script>
这是因为您的循环在第一个动画完成之前很久就结束了,并且 .text()
不会等待动画。
要解决此问题,请删除 .each()
,并使用回调 .fadeOut()
手动递增计数器。
$(function(){
var i = 0; // maintain a counter
var myTab = ['One', 'Two', 'Three', 'Four'];
// Create a `cycle` function (invoked immediately, see below)
(function cycle() {
// Only try the display if `i` is in the Array range
if (i < myTab.length) {
$('#showHere').text(myTab[i])
.fadeIn('slow')
.delay(5000)
.fadeOut('slow', cycle); // Pass `cycle` as a callback
i++;
}
})(); // Invoke `cycle` immediately
});
首先,为了性能,您必须获取要多次调用的 div
元素的句柄:
var showHere = $('#showHere');
那么你想要使用 setTimeout
函数:
var myTab = ['One', 'Two', 'Three', 'Four']
var showHere = $('#showHere');
$(myTab).each(function (i, elem) {
setTimeout( function(){
showHere.text(elem).fadeIn('slow').fadeOut('slow');
}, i*2000);
});
Note that we multiply the setTimeout
time by index, otherwise everything would be executed in the same time period.
我有一个 jQuery 代码,如下所示。 我想遍历整个阵列 - 显示一条消息 5 秒,然后转到下一条并显示 5 秒,然后继续下一条。 问题是它只显示最后一项 - "Four".
<script>
$(function(){
var myTab = ['One', 'Two', 'Three', 'Four']
$(myTab).each(function(i, elem){
$('#showHere').text(elem).fadeIn('slow').delay(5000).fadeOut('slow');
})
});
</script>
这是因为您的循环在第一个动画完成之前很久就结束了,并且 .text()
不会等待动画。
要解决此问题,请删除 .each()
,并使用回调 .fadeOut()
手动递增计数器。
$(function(){
var i = 0; // maintain a counter
var myTab = ['One', 'Two', 'Three', 'Four'];
// Create a `cycle` function (invoked immediately, see below)
(function cycle() {
// Only try the display if `i` is in the Array range
if (i < myTab.length) {
$('#showHere').text(myTab[i])
.fadeIn('slow')
.delay(5000)
.fadeOut('slow', cycle); // Pass `cycle` as a callback
i++;
}
})(); // Invoke `cycle` immediately
});
首先,为了性能,您必须获取要多次调用的 div
元素的句柄:
var showHere = $('#showHere');
那么你想要使用 setTimeout
函数:
var myTab = ['One', 'Two', 'Three', 'Four']
var showHere = $('#showHere');
$(myTab).each(function (i, elem) {
setTimeout( function(){
showHere.text(elem).fadeIn('slow').fadeOut('slow');
}, i*2000);
});
Note that we multiply the
setTimeout
time by index, otherwise everything would be executed in the same time period.