如何制作类似于谷歌数字生成器的数字生成器
如何制作类似于谷歌数字生成器的数字生成器
我正在尝试在网页上创建一种数字生成器。我想在生成的数字显示之前显示五个数字。为了更好地想象,你可以看一下谷歌生成器。当你点击生成时,它会显示3-4个数字在生成的数字之前。我使用了setInterval或setTimeout,但我不知道它们是如何工作的。我的JS代码如下:
var button = document.querySelector("button"); button.addEventListener("click",function() { for (var i = 0; i < 8; i++) { setInterval(textC,5); } }); function textC(){ number.textContent = Math.floor(Math.random() * 1000) + 1; }
感谢所有的帮助!
问题的出现原因:
在生成类似于谷歌数字生成器的数字生成器时,不应该使用循环。循环在JavaScript中是同步执行的,会阻塞浏览器的渲染,导致用户界面无响应。
解决方法:
使用嵌套的setTimeout方法来代替循环。通过设置预定义的阈值,调用setTimeout方法,直到达到阈值为止。这样可以最大程度地控制代码的执行,避免阻塞浏览器的渲染。
以下是生成数字生成器的示例代码:
var button = document.querySelector("button"); var number = document.querySelector("#number"); const nRuns = 12; const timeout = 100; let iterator = 0; button.addEventListener("click", textC); function textC() { number.textContent = `${Math.floor(Math.random() * 1000) + 1}\n`; iterator += 1; if (iterator < nRuns) { setTimeout(textC, timeout) } else { iterator = 0; // you control the loop, so it's time for some extra text after it number.textContent += ` ... and that concludes this series of random numbers`; } }
以下是HTML部分的代码:
以上代码使用嵌套的setTimeout方法实现了一个数字生成器,每隔一段时间生成一个随机数,直到达到预定义的次数为止。通过这种方式,能够控制代码的执行,避免阻塞浏览器的渲染,从而实现类似于谷歌数字生成器的效果。
问题的出现原因:使用setInterval()
会无限循环生成随机数,需要手动清除才能停止。而我们需要的是每隔一段时间生成一个随机数。
解决方法:改用setTimeout()
,并根据循环中的i
值来设置超时时间。这样每个间隔都会在前一个间隔的基础上增加50毫秒。
以下是示例代码:
const button = document.querySelector("button"); const number = document.querySelector("#number"); button.addEventListener("click", function() { for (let i = 0; i < 5; i++) { setTimeout(textC, 50 * i); } }); function textC() { number.textContent = Math.floor(Math.random() * 1000) + 1; }
以下是示例HTML代码: