【问题标题】:Set an array to select different variables onclick设置数组以在点击时选择不同的变量
【发布时间】:2016-11-29 13:49:42
【问题描述】:

我正在编辑一些实验性设置,以创建一个随机出现的 div,当您单击它时它就会消失。每次单击时,我都会遇到强制变量“x”与数组不同的数字的问题。相反,它会在开始时从数组中选择一个数字并一直坚持下去。

DIV:

<div id="div" onclick="hide()" style="visibility:hidden;">Doge</div>

JS:

<script type = "text/javascript">  

var interval = [5000, 1000, 10000, 6000, 500];
var x = interval[Math.floor(Math.random() * interval.length)];
setInterval(function(){
document.getElementById('div').style.visibility = "visible";
},x);

function hide(){
document.getElementById('div').style.visibility = "hidden";
var x = interval[Math.floor(Math.random() * interval.length)];
}

</script>

每次单击 div 时,我希望它以不同的时间间隔重新出现。

【问题讨论】:

  • 为什么有2个脚本标签
  • @Mahi 已修复,已缩短

标签: javascript jquery html arrays onclick


【解决方案1】:

setInterval 采用 delay 值并在每个间隔中使用该值。它不受您更新变量的影响。你想要的是setTimeout,每次调用hide 函数时你都会设置它。

var interval = [5000, 1000, 10000, 6000, 500];
var div = document.getElementById('div');

function hide(){
  div.style.visibility = "hidden";
  showIn(randomInterval());
}

function randomInterval() {
  return interval[Math.floor(Math.random() * interval.length)];
}

function showIn(delay) {
  setTimeout(function() {
    div.style.visibility = "visible";
  }, delay);
}

// call directly in the beginning to show the div
showIn(randomInterval());

【讨论】:

    【解决方案2】:

    问题在于您的随机生成编号,大多数情况下它会一次又一次地重复相同的值。

    Link of your random number generation output

    尝试解决此问题并重试。

    【讨论】:

    • 这确实会强制它每次在数组中输出一个不同的变量,但我试图让“setinterval”中的时间变量“x”每次都是不同的时间。
    【解决方案3】:

    <script type = "text/javascript">  
    
    var interval = [5000, 1000, 10000, 6000, 500];
    var x = interval[Math.floor(Math.random() * interval.length)];
    setInterval(function(){
    document.getElementById('div').style.visibility = "visible";
    },x);
    
    function hide(){
    document.getElementById('div').style.visibility = "hidden";
    var x = interval[Math.floor(Math.random() * interval.length)];
     setInterval(function(){
    document.getElementById('div').style.visibility = "visible";
    },x);
    }
    
    </script>

    【讨论】:

    • 这可能是因为为了给 setinterval 中的 x 一个时间过去,它需要有一些预定义的东西。 @Mahi
    • 查看我的编辑如果不工作然后向我们展示你的 sn-p 或小提琴
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    相关资源
    最近更新 更多