带有多个列表的随机URL JS
问题描述:
我有一个导航栏,我想访问与每个链接关联的不同列表中的随机URL。链接A将访问列表A,链接B将访问列表B,等等。 我一直使用从1997年的JavaScript代码,一条链路的伟大工程:包含在一个js文件带有多个列表的随机URL JS
< --code: - >
rnd.today=new Date();
rnd.seed=rnd.today.getTime();
function rnd() {
rnd.seed = (rnd.seed*9301+49297) % 233280;
return rnd.seed/(233280.0);
};
function rand(number) {
return Math.ceil(rnd()*number);
};
var item = 0;
var URL = new Array();
URL[item++] = 'listitema.php';
URL[item++] = 'listitemb.php.php';
URL[item++] = 'listitemc.php';
function randomJump() {
var random = rand(item) - 1;
location.href = URL[random];
};
< --end js文件: - >
这是与该访问:
<a href="javascript:randomJump()" onmouseover="self.status='';return true">
尽管此代码非常适用于每页一个链接,我现在需要把它的工作万亩一个链接,每个链接都有一个不同的参考列表。我不知道如何使这个脚本适用于每个链接而不会干扰其他链接。 谢谢。
答
这里的一个小功能,与许多不同的URL列表的工作,只要你想:
var listA = [
'listitem-a.php',
'listitem-b.php',
'listitem-c.php'
];
var listB = [
'listitem-1.php',
'listitem-2.php',
'listitem-3.php'
];
var listC = [
'listitem-x.php',
'listitem-y.php',
'listitem-z.php'
];
function goRandomURL(list) {
window.location = list[Math.floor(Math.random() * list.length)];
}
然后,使用listA
,你会打电话:
goRandomURL(listA);
或把它放在一个链接像这样:
<a href="#" onclick="goRandomURL(listA)">
或对于listB,你可以使用这个:
<a href="#" onclick="goRandomURL(listB)">
供自己参考,javascript的Math.random()
函数返回一个随机数为0和1(不包括1),它已经去籽根据当地的环境,这样你就不用多介绍之间浮动你拥有种子或随机功能。然后随机数按传入数组的长度进行缩放,然后向下舍入为数组索引的整数。这具有为我们的数组选择随机索引的效果。它会自动跟踪数组的长度,因此您可以*地添加/删除数组中的项目,而无需以任何方式更改代码。
编辑 - 帮助您解决当前的问题。在当前的代码,我看到:
var listA = [
'orange.php';
'red.php';
'blue.php';
];
var listB = [
'gold.php';
'silver.php';
'bronze.php';
];
var listC = [
'olive.php';
'pink.php';
'purple.php';
];
它应该是这样的:
var listA = [
'orange.php',
'red.php',
'blue.php'
];
var listB = [
'gold.php',
'silver.php',
'bronze.php'
];
var listC = [
'olive.php',
'pink.php',
'purple.php'
];
而且这样的:
goRandomURL(list) {
window.location = list[Math.floor(Math.random() * list.length)];
}
应该是这样的:
function goRandomURL(list) {
window.location = list[Math.floor(Math.random() * list.length)];
}
为什么不使用'Math.random()'而不是自己的函数?如果你需要确保你的本地随机值与服务器上的相同(即相同的算法,相同的种子),通常使用自定义的RNG才有意义... – ThiefMaster