我正在制作一个支持ajax的实验室预约程序,其中一些ajax操作不是非常快速。
在Gmail中,当您进入收件箱、发送邮件等操作时,浏览器会像加载新页面一样表现(在Firefox中,停止按钮变为可用状态,进度条出现),但实际上这些操作是通过AJAX完成的。
他们是如何做到的呢?我有一个旋转指示器,但如果能让浏览器表现得像正在加载就更好了。你有什么想法吗?
这篇文章详细介绍了不同类型的请求以及它们是否会触发繁忙指示器(例如进度条)。
可能的解决方案是使用iframe
来触发加载。但根据之前的回答,iframe方法在Chrome上无法工作。
您的需求是在浏览器上显示加载图标,所以我认为另一种方式是创建一个假的加载图标
。
您可以手动更新浏览器图标。有一些关于如何更新浏览器图标的教程。
然后,尝试使图标动起来。大多数浏览器不支持gif
图标,所以您需要每隔几秒钟更新一次图标。
这是演示代码:
var favicon_images = [];
for (var i = 1; i <= 12; i++)
favicon_images.push('./icon/' + i + '.png');
var image_counter = 0;
setInterval(function() {
var link = document.querySelector("link[rel*='icon']") || document.createElement('link');
link.type = 'image/x-icon';
link.rel = 'shortcut icon';
link.href = favicon_images[image_counter];
document.getElementsByTagName('head')[0].appendChild(link);
if(image_counter == favicon_images.length -1)
image_counter = 0;
else
image_counter++;
}, 150);
我创建了一个快速演示。Demo
通过这个演示,你可以发现图标动画没有平滑运行。这是因为每次更新图标时,浏览器都会再次请求图标。
所以将图像转换为base64格式,它就可以平稳地工作。
现在,你只需要找到与Chrome
和其他流行浏览器相同的加载图标,然后在调用ajax时触发假加载
即可。
这里我贴上一些更改图标的教程:
我相信你想要的是这样的。
我已经添加了一个API来获取github.com
的地理位置(虽然不相关,但我认为它可以作为示例API)。
这是一个简单的JavaScript
和JQuery
代码,用于在进行AJAX
请求时显示/隐藏加载指示器。
$('#btn').click(function() {
$('#overlay').show();
$.ajax('https://freegeoip.net/json/github.com').then(function(response) {
$('#overlay').hide();
$('#country').html(response.country_name);
});
});
body {
padding: 0;
margin: 0;
}
#overlay {
position: fixed;
width: 100%;
height: 100%;
display: flex;
align-items: center;
top: 0;
background-color: rgba(255, 255, 255, 0.7);
}
.plus {
display: flex;
margin: 0 auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="overlay" style="display:none">
<div class="plus">
<img src="https://loading.io/assets/img/landing/curved-bars.svg" alt="loading"/>
</div>
</div>
<div>
<button id="btn">Perform AJAX Operation</button>
<div>
Country: <span id="country"></span>
</div>
</div>
wait
。 - Vipin Kumar
iframe
元素,加载一个“ping”页面(这个页面在 XHR 结束之前不会响应,这意味着它可能需要像 sessions 这样的服务器端锁),并在该iframe
上放置事件处理程序以处理浏览器的加载取消。完成iframe
加载后,请别忘了修复历史记录。 - Xenos