Javascript:如何在文件下载之前显示旋转器
javascript: how to show spinner until file downloads
我有一个按钮下载excel文件。当用户单击按钮时,调用onClick函数窗口。位置url =
下载完成后,弹出文件保存对话框。
现在,我想显示一个旋转器,直到文件对话框出现。我该怎么做呢?
我试图在"window "之前创建一个旋转器。然后隐藏它,但是旋转器会立即消失,因为窗口。在文件下载之前,位置不会阻塞。
任何想法?
谢谢。
这将是一个只适用于Firefox浏览器的解决方案:
<script type="text/javascript">
//<![CDATA[
function download(url){
document.getElementById('spinner').style.display='';
frame = document.createElement("iframe");
frame.onload=function(){document.getElementById('spinner').style.display='none';}
frame.src=url;
document.body.appendChild(frame);
}
//]]>
</script>
在你的HTML中,设置一个旋转器并准备好:
<div id="spinner" style="background:url('/images/ico-loading.gif') #000 center no-repeat;opacity:.5;width:100%;height:100%;display:none;position:absolute" />
然后这样调用它:
<button type="button" onclick="download('/spreadsheet.xls');">DOWNLOAD SPREADSHEET</button>
按钮将使用我们想要下载的URL调用javascript函数。此时,我们使隐藏的旋转器DIV可见,并允许它占据整个屏幕(注意样式中的位置绝对)。创建IFRAME来压缩文件。文件下载后,它被交给用户,并触发. onload事件,隐藏旋转器DIV。所有这些都是用客户端javascript完成的!
仅使用客户端脚本是无法做到这一点的,因为当下载完成时没有事件。
您必须通过服务器上的代理页面下载文件,在URL中有唯一的标识,以便可以识别每次下载。然后,可以从脚本向服务器发送AJAX请求,以确定下载的状态。
此代码适用于jQuery,但也适用于javascript。有了这个,你根本不需要改变你的请求代码。
- 创建一个包含动画的div元素(可以是另一个带有css-animation的div元素,也可以是img元素中的动画gif),并赋予它id = "loadingicondiv"。例如:
<div id="loadingicondiv">
<div id="loadingicon" style="background:url('imgs/logo.png') center no-repeat;opacity:1.0;display:none;position:absolute;z-index: 9999;"></div></div>
- 在css文件中设置div的样式,如下所示
- 在嵌入的js文件中输入
#loadingicondiv{
width: 100vw;
height: 100vh;
background: rgba(0,0,0, 0.3);
position: fixed;
z-index: 9999;
}
function showAnimation(){
$('#loadingicondiv').css({display : ''});
};
function hideAnimation(){
$('#loadingicondiv').css({display : 'none'});
};
$(document).ajaxStart(showAnimation).ajaxStop(hideAnimation);
最后一行使你的web应用程序发送的每个请求,在开始时执行函数"showAnimation",并在请求完成时执行函数"hideAnimation"。
如果您不使用jQuery,需要纯javascript,只需将$('#loadingicondiv')替换为以下代码
document.getElementById('loadingicondiv').style.display = 'none'
注意:如果你在你的网站上有一些频繁的更新,你不想显示动画,只是让动画的显示依赖于一个全局变量,你设置为false之前发送那些特殊的请求,你不希望动画被显示。当请求被完成时,不要忘记将其设置为true
- 在引导程序旋转木马中显示下一个图像
- JS下拉菜单显示在图像旋转器上
- IE11(Windows Phone 8.1)不感应(显示尺寸)屏幕旋转
- 引导程序旋转木马未显示在页面上
- 背景图像旋转器.php + jQuery每4秒显示一次随机照片
- 如何使用 JavaScript 在 Web 中显示之前旋转图像
- Jquery/Jscript:显示数组中的字符串的旋转数组
- 如何以“旋转”方式突出显示某些元素
- 需要按钮显示/隐藏图像旋转 href 添加到 javascript 代码中
- 如何驱动开关/旋转按钮以切换使用Javascript显示的内容
- 网站加载时显示旋转轮或进度条
- 无限旋转木马与下一个和上一个显示
- 猫头鹰旋转木马YouTube视频未显示
- 使显示下一个/上一个部分的旋转木马响应
- 加载图表时显示旋转图像
- 如何在servlet get调用从服务器获取数据时显示旋转器
- Jquery处理时显示旋转器
- 我应该如何显示旋转图像时,响应需要一段时间
- 在facebox中加载iframe时显示旋转器
- Javascript:如何在文件下载之前显示旋转器