Javascript随机睡眠循环?

时间:2017-03-25 17:21:17

标签: javascript html

我正在开启一个URL。我想延迟打开每个链接。时间应该是随机的。从2秒到9秒。

任何人都可以帮我怎么做? 我尝试了一种在Stack上找到的方法。但链接在固定时间后打开。即5秒......或者我给的任何时间......那么如何以随机的方式制作它?

表格代码:

 <form method="post" action="">
      <br />
      <textarea name="list_urls" id="list_urls" cols="60" rows="20"></textarea>
      <br />
      <br />
      <input value="Open URLs" class="submit" type="button" onClick="open_all();">
      <br />
      <input type="reset" value="Reset!">
      <br/>
    </form>

JS代码

<script>
  function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i++) {
    if ((new Date().getTime() - start) > milliseconds){
      break;
    }
  }
  }
  function open_all() {
        var urls = document.getElementById("list_urls").value;
        var urls = urls.split(/\s+/);
        var totalno = urls.length;
        var s;
        for (var i = 0; i < totalno; i++) {
            s = urls[i];
            if (s) {
                if (s.substr(0, 7) != 'http://' && s.substr(0, 8) != 'https://')
                    s = 'http://' + s;
                    sleep(5000);
                    window.open(s)
            }
        }
        return false;
    }
  </script>

2 个答案:

答案 0 :(得分:0)

<dependencies>setTimeout

一起使用
Math.random()

答案 1 :(得分:0)

您只需使用window对象的setTimeout()方法即可。

代码不会在Stack Overflow代码段环境中运行,但您可以看到它正常工作 here

其他一些事情:

  • 不要使用内联HTML事件处理属性(onclickonmouseover等)因为他们创建了意大利面条代码,导致重复 代码并且不遵循W3C DOM事件标准。
  • 如果您没有在任何地方提交数据,请不要使用<form>

&#13;
&#13;
// Get DOM References
var btnGo = document.getElementById("go");
var btnReset = document.getElementById("reset");
var list = document.getElementById("list_urls");

// Set up event handlers:
btnGo.addEventListener("click", open_all);
btnReset.addEventListener("click", function(){ urls.value = ""; });

function open_all() {
  // Separate input into an array
  var urls = list.value.split(/\s+/);
  
  // Loop over the items in the array
  urls.forEach(function(value){
  
    // Get random number between 2 and 8
    var delay = (Math.floor(Math.random() * 7)) + 2;
  
    // Append "http://" if no protocol present
    var url = (value.indexOf('http://') === -1 && value.indexOf('https://') === -1) ? 
      'http://' + value : value;
    
    // Call the open function after waiting the delay times 1000 (for milliseconds)
    setTimeout(function() { open(url); }, delay * 1000);
    
  });
}

function open(s){
  window.open(s)
}
&#13;
<div>
    <textarea name="list_urls" id="list_urls" cols="60" rows="20"></textarea>
</div>
<div>
    <input value="Open URLs" class="submit" type="button" id="go">
</div>
<div>
    <input type="button" value="Reset!" id="reset">
</div>
&#13;
&#13;
&#13;

相关问题