为什么JavaScript对话框(警告、确认)会停止页面重绘

Why does JavaScript dialog boxes (alert, confirm) stop page redrawing?

本文关键字:对话框 JavaScript 警告 确认 为什么      更新时间:2023-09-26

在浏览器页面上打开一个模式对话框,可以阻止页面重新绘制。异步启动的脚本在后台不间断地运行。

我展示了这个JSfiddle中的行为http://jsfiddle.net/YNbux/.当显示alert()时,长方体会停止其动画,而当警报关闭时会在动画中跳跃。

这种行为出现在(至少在我的电脑上):

  • 铬21.0.1180.82
  • 歌剧12.01
  • Safari 6.0

所以我想这是故意的行为,但会导致动画跳跃,以及其他对最终用户来说似乎是故障的事情。那么为什么alert()confirm()会阻止页面重新绘制呢?

编辑:gif图像也停止重新绘制:http://jsfiddle.net/YNbux/4/

这些函数是阻塞函数。您的JavaScript将停止执行,直到它们返回。

您的动画和不在后台的内容并没有与调用alert()的代码完全分离。看似异步的代码仍然需要在循环中执行,如果某些代码阻塞了该循环,它们将不会单独运行。这对于代码的正确操作至关重要。