8

有没有一种简单的方法可以在不更改您所在页面的情况下启动和停止浏览器抖动(页面加载指示器)?最好没有外部库或 AJAX 调用。

4

3 回答 3

12

不,您可以尝试通过执行 ajax 调用或其他方式来强制它旋转,但不要这样做。浏览器的那部分不是给你的,它是给浏览器的!

这有点像询问您是否可以更改系统时钟,以便您的包含时间机器的游戏更加逼真。

于 2012-12-28T15:03:32.147 回答
4

您可以调用一个简单的服务器端脚本,我们称之为“sleep.cgi”,它会停止执行(睡眠)并延迟在隐藏的 iframe 中交付一些简单的自动重新加载页面。这应该使几乎所有主要浏览器都显示您所谓的“浏览器抖动”(页面加载指示器)。一旦完成了希望显示 throbber 的任何原因,您只需将提到的 iframe 位置重置为空字符串。这就是我的做法:

1) 编写一个简单的服务器端脚本,接收请求并暂停执行长达 30 秒,不想碰到浏览器的页面加载超时墙。休眠期结束后,此服务器脚本会响应以下内容:

<html><body onload="location.reload();"></body></html>

强制它循环,直到您希望浏览器显示“页面加载”指示器。

2) 编写支持的 JavaScript 函数,这些函数将根据请求启动和停止 'throbber' 并添加我们将使用的 HTML 元素:

<script>
  function startThrobber(){
    document.getElementById('throbberFrame').src='sleep.cgi?'+Math.random();
  }
  function endThrobber(){
    document.getElementById('throbberFrame').src='';
  } 
</script>

<div id="throbberWrapper" style="display:none;visibility:hidden;">
  <iframe id="throbberFrame" style="width:1px;height:1px;"></iframe>
</div>

我在 Chrome/IE/Opera/Firefox 中做了一个快速测试,它似乎工作正常。不过,我从来没有必要做这样的事情。

编辑:如果您的网络服务器支持 PHP 脚本,这里是睡眠函数参考: http: //php.net/manual/en/function.sleep.php我不是用 PHP 编写的,但我相信您的 PHP 文档应该看起来不错的行:

<html><body onload="location.reload();">
<?php
  // sleep for 29 seconds
  sleep(29);
?>
</body></html>

干杯!

于 2013-01-25T03:10:12.103 回答
1

如果加载了占用大量 CPU 资源的内容,则 UI 会冻结,因此您永远不会看到动画 GIF 或进度条。

你有一个 XY 问题。您可以通过使用 setTimeout 将 CPU 密集型操作分成更小的块来防止浏览器冻结。浏览器 throbber 是一个 UI 元素,表示正在从网络加载某些内容;如果您出于任何其他原因使用它,那将非常令人困惑。

于 2013-01-25T09:32:09.970 回答