而true循环会冻结浏览器的javascript
while true loop freezes up broswers javascript
所以我试图使图像改变,使它们成为一个循环,我想出了这个脚本,我遇到的问题是,当它改变到第二张图片javascript会冻结在我,我知道它的同时(真实)部分,但我不知道如何修复它,请帮助。
谢谢你
var images = new Array();
images[0] = "image1.jpg";
images[1] = "image2.jpg";
images[2] = "image3.jpg";
setTimeout("changeImage()", 3000);
var x=0;
function changeImage()
{
while(true){
document.getElementById("img").src=images[x]
x++;
}
if (x=2){
x=0;
}
}
啊,我知道你想干什么了。
while (true)
将永远循环同步。你想要的是每3秒不断地改变图像(异步)。
试试这个:
var timeoutId = null;
function changeImage() {
document.getElementById("img").src = images[x];
x = (x + 1) % images.length;
timeoutId = setTimeout(changeImage, 3000);
}
这样,changeImage
就不会永远循环;但每次被调用时,它都会在3秒内调度另一个对changeImage
的调用。这个异步进程将无限期地继续下去(正如您试图对while (true)
所做的那样),直到用户离开页面或者您选择调用clearTimeout(timeoutId)
。
注意,您也可以通过将全局变量x
作为changeImage
的参数来摆脱它,如下所示:
function changeImage(x) {
document.getElementById("img").src = images[x];
timeoutId = setTimeout(function() {
changeImage((x + 1) % images.length);
}, 3000);
}
这是因为你故意创建了一个无限循环。
我不确定你在找什么其他解释....
你的代码永远不会达到条件:
if (x=2)
,因为它永远不会跳出循环。提供一些逃离循环的方法。如果您的目的是定期循环图像,那么也许您应该考虑将图像设置为计时器。
而且,您的代码暗示有无限数量的图像
你的浏览器会死机,因为JavaScript是单线程的;它将忽略所有输入和事件,直到循环完成。
你真正想要的是这样的东西:
var x = 0;
var nextImage= function () {
document.getElementById("img").src = images[x];
x = (x + 1) % images.length;
}
setInterval(nextImage, 3000);
在每个循环中,代码更改一个图像并退出,允许处理其他事件。
顺便说一句,我并不是想写一个好的 JavaScript,只是为了回答你的问题。
相关文章:
- 如何知道浏览器javascript的名称
- 跨浏览器javascript下载功能
- 如何避免在浏览器 JavaScript 中双击时(单击鼠标)处理
- 有没有办法从浏览器javascript打开Windows 10上的Microsoft地图
- 如何从应用程序的服务器端向浏览器 JavaScript 发送事件
- 浏览器Javascript - 任何了解用户当前IP的方法
- 如何强制浏览器/javascript 清除/忽略缓存文件
- 在浏览器 (javascript) 中将 Cognito 凭证与 AWS 配合使用时,不断收到“缺少凭证”错误
- 读取使用浏览器 Javascript 忽略的文件
- 如何在浏览器 JavaScript 中维护来自同一站点的不同页面加载的状态
- 跨浏览器JavaScript,用于从用户的选择中获取和替换确切的HTML
- 在关闭浏览器 javascript 时删除本地存储
- 如何在android浏览器javascript中捕获退格键代码
- 使用JavaScript启用和禁用浏览器JavaScript选项
- 浏览器Javascript:setTimeout和主程序
- 了解开发者控制台在当前浏览器(JavaScript)中是否处于活动状态
- 是否可以验证浏览器Javascript会话的完整性
- 我们可以期待一个浏览器javascript API到DNS解析程序
- node.js和浏览器javascript的配置相同
- 使用浏览器JavaScript SDK检查AWS S3上是否存在文件