每次有人重新加载页面时如何打开一个新链接?

3
我正在尝试构建一个系统,每次单击锚标记时都会打开一个新链接。我尝试使用随机函数,但有时它会反复打开相同的链接。然而,我希望链接按顺序打开并遵循循环。也就是说,如果我有三个链接,用户第一次单击锚文本将打开第一个链接,然后是第二个链接,接着是第三个链接,然后再次是第一个链接。
这意味着如果不同的用户单击,则链接必须更改。
下面是我找到的一个使用随机函数的代码:
<script type="text/javascript'>
function random_3(){
    var myrandom=Math.round(Math.random()*2)
    var link1="http://www.codingforums.com"
    var link2="http://www.cssdrive.com"
    var link3="http://www.dynamicdrive.com"
    if (myrandom==0)
        window.location=link1
    else if (myrandom==1)
        window.location=link2
    else if (myrandom==2)
        window.location=link3
}
</script>
<form>
<input type="button" value="random link!" onClick="random_3()">
</form>

所以,有人能帮我解决这个问题吗?
5个回答

1

我尝试使用随机函数,但有时它会一遍又一遍地打开同一个链接

由于您正在使用的随机计算,可能会连续几次获取相同的链接。 请改用以下方法:

var myrandom=Math.floor(Math.random()*3);

通过这种方式,您应该能够获得更好的分布。

现在,关于您最初的问题,如果您希望在页面重新加载之间保持持久状态,以便每次链接都不同,您可能需要使用cookie或localStorage来存储该用户上次使用的索引。

示例:

var links = ['http://www.codingforums.com', 'http://www.cssdrive.com', 'http://www.dynamicdrive.com'];
function nextLink() {
 var index = localStorage.getItem('lastPos') || -1;
 index = (index + 1) % links.length;
 localStorage.setItem('lastPos', index);
 return links[index];
}

0

 var myrandom = 0;

function random_3(){
   myrandom += 1;
    
    var link1="http://www.codingforums.com";
    var link2="http://www.cssdrive.com";
    var link3="http://www.dynamicdrive.com";
    if (myrandom==1)
      window.open('http://www.codingforums.com','_blank');
    else if (myrandom==2)
         window.open('http://www.cssdrive.com','_blank');
    else if (myrandom==3)
        window.open('http://www.dynamicdrive.com','_blank');
    else if (myrandom>3)
         window.open('http://www.codingforums.com','_blank');
}
  
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<form>
<input type="button" value="random link!" onClick="random_3()">
</form>


0
首先,您需要将链接列成一个数组。其次,您需要定义一个变量来保存在该数组中最后打开的链接的索引,以避免连续打开相同的链接(实际上它是一个URL)。通常情况下,您可以按照以下代码进行操作:
urls = ['http://domain1.com','http://domain2.com', 'http://domain3.com', 'http://domain4.com'];
var lastUrl = '';
function getRandomIndex(arr){  
  return Math.floor(Math.random() * ((arr.length+1) - 1));
}
function openUrl(){
  url = urls[getRandomIndex(urls)]; 
  do {
      if (url == lastUrl){
        url = urls[getRandomIndex(urls)];
      }
    else{
        lastUrl = url;
        //Using alert instead of window.location for testing
        alert(url)
        //window.location = url;       
    }
  }
  while (lastUrl != url);
  
}

然后进行测试:

<a href="javascript:openUrl()">Click here for test</a>

这是一个在线演示

参考:如何在JavaScript中生成特定范围内的随机整数?

编辑

根据您的评论,要求相当简单,而不是根据随机值选择,您将把lastUrl定义为整数存储,并且每次调用openUrl()时,在检查其值是否大于urls数组长度之后,它将增加1,如下所示:

修改后的openUrl

urls = ['http://domain1.com','http://domain2.com', 'http://domain3.com', 'http://domain4.com'];
//lastUrl Index in urls array
// Global variable
var lastUrl = 0;
function openUrl(){
      if (lastUrl > (urls.length - 1)){
          //reset it to 0
          lastUrl = 0;
      }
      else{
          url = urls[lastUrl];
          lastUrl++;
          alert(url)
        //window.location = url; 
      }
    }

我希望在每次重新加载页面后链接可以自动打开。 - Patricia Moore
@PatriciaMoore,已经对您的查询进行了编辑。 - SaidbakR
哦,抱歉误解了,所以您必须使用cookies来存储“lastUrl”的值这是一个教程 - SaidbakR

0
你需要做的是保存链接的索引,然后每次增加它,这样你就可以按顺序循环浏览链接。
以下是一个可行的示例:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<script>
  urls = ['http://domain1.com','http://domain2.com', 'http://domain3.com', 'http://domain4.com'];
  var urlIndex = 0;

function openUrl(){
  url = urls[urlIndex % urls.length];
  window.location = url;
  urlIndex ++;
}
  </script>
  <a href="javascript:openUrl()">Get a link</a>
</body>
</html>

这里有一个演示 :)


抱歉,也许我之前表达不够清楚。例如,如果有3个用户访问我的网站,当用户1点击此链接时,他将进入链接1,同样地,用户2进入链接2,用户3进入链接3,之后第四个用户来并点击该链接时,他再次进入链接1,以此类推。如果我没记错的话,上述代码将适用于同一用户。 - Patricia Moore
1
当用户1点击此链接时,他将转到链接1,同样地,用户2将转到链接2,用户3将转到链接3。这只能在服务器端完成,不包括并发问题。没有客户端解决方案可用。 - Alex Kudryashev

-1

您可以计算点击次数,就像用户点击按钮一样,并根据此进行管理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接