我有这段脚本,我无法弄清楚如何成功删除随机函数,以便数组一次一个地流过每个数组项而不是随机显示每个数组项。
$(window).ready(function() {
var helloArray = ["hello", "bonjour", "hola", "konnichiwa", "hujambo", "czesc", "hei", "ciao"];
$('#page_title').loadText( helloArray, 5000 ); // ( array, interval )
});
$.fn.loadText = function( textArray, interval ) {
return this.each( function() {
var obj = $(this);
obj.fadeOut( 'slow', function() {
obj.empty().html( random_array( textArray ) );
obj.fadeIn( 'fast' );
});
timeOut = setTimeout( function(){
obj.loadText( textArray, interval )
}, interval );
$("#text-reload").click( function(){
if( !obj.is(':animated') ) {
clearTimeout( timeOut );
// animation check prevents "too much recursion" error in jQuery
obj.loadText( textArray, interval );
}
});
});
}
//public function
function random_array( aArray ) {
var rand = Math.floor( Math.random() * aArray.length + aArray.length );
console.log(randArray);
var randArray = aArray[ rand - aArray.length ];
return randArray;
}
答案 0 :(得分:1)
创建一个变量,用于保存上次加载的索引。每次调用%
loadText()
)变量
我还建议您阅读jQuery的.data()
函数,因为看起来您正在尝试创建一个jQuery插件。这将帮助您跟踪当前索引,而不会污染全局变量空间。
最后,看起来你试图每隔5秒加载一次文本,但是这样做是通过调用setTimeout
来实现的,这会强制你添加一堆代码以防止无限递归。您应该查看setInterval
函数,该函数每隔X毫秒触发一次回调。
答案 1 :(得分:1)
尝试
$(document).ready(function() {
var helloArray = ["hello", "bonjour", "hola", "konnichiwa", "hujambo",
"cześć", "hei", "ciao"];
$('#page_title').loadText(helloArray, 1000); // ( array, interval )
document.title = $('#page_title').text();
});
// custom jquery plugin loadText()
$.fn.loadText = function(textArray, interval) {
return this.each(function() {
var obj = $(this), intervalId, counter = 0;
function change() {
obj.fadeOut('slow', function() {
var text = textArray[counter++];
obj.html(text).fadeIn('fast');
document.title = text;
counter = counter >= textArray.length ? 0 : counter;
});
}
function start() {
intervalId = setInterval(change, interval);
};
start();
$("#text-reload").click(function() {
if (!obj.is(':animated')) {
clearInterval(intervalId);
start();
}
});
});
}
演示:Fiddle