javascript - 如何记住 setInterval 中的过去值?
问题描述
我有这个函数可以连续生成两个从 0 到 7 的随机数。这两个数字对应于我的 DOM 中的一个 id。
如何确保下一个间隔不会以与最后一个间隔相同的顺序给出相同的两个数字(换句话说,给出与最后一个间隔相同的 id)?
如果它们是相同的,我如何跳过这个间隔并继续下一个而不等待间隔时间?
function chooserandomtile() {
cycle = setInterval(() => {
let i_random = Math.floor(Math.random() * 8);
let j_random = Math.floor(Math.random() * 8);
var id = i_random + ',' + j_random;
var target = document.getElementById(id);
if (target.classList.contains('target') || target.contains(player)) {
} else {
target.classList.add('target');
}
console.log(id);
console.log(document.getElementById(id));
}, interval);
解决方案
只需声明一个将在您的方法范围之外持续存在的变量,并将其设置为跟踪先前的值。如果您的随机逻辑产生与上次相同的 ID,请重试,直到它为您提供不同的值。
function chooserandomtile() {
let lastId;
cycle = setInterval(() => {
let id;
do {
let i_random = Math.floor(Math.random() * 8);
let j_random = Math.floor(Math.random() * 8);
id = i_random + ',' + j_random;
} while (id === lastId)
lastId = id;
var target = document.getElementById(id);
if (target.classList.contains('target') || target.contains(player)) {
} else {
target.classList.add('target');
}
console.log(id);
console.log(document.getElementById(id));
}, interval);
推荐阅读
- javascript - 测试用作 setTimeout 回调的异步函数
- arrays - 移动 Elm 列表元素的更好方法
- php - 自定义主题不加载css Drupal 8
- android-studio - Android Emulator 和 VirtualBox 无法使用相同的设置
- python - 我怎样才能让findingcontour减慢?
- intellij-idea - 使用 Cursive 插件在 IDEA 中加载 leiningen 项目时出错
- java - Random.nextGaussian() 的真正最大值(和最小值)是多少?
- c# - 打开新表单的类方法C#
- angular - 如何动态绑定ngmodel?
- wordpress - wp cron wordpress 问题