javascript – 重新启动gif而不在IE11中重新加载它
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 重新启动gif而不在IE11中重新加载它,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3363字,纯文字阅读大概需要5分钟。
内容图文
![javascript – 重新启动gif而不在IE11中重新加载它](/upload/InfoBanner/zyjiaocheng/782/ea4c89b29e2340749ddeafac3ef3041f.jpg)
当用户点击它时,我正在尝试重新启动它,而不必重新加载它(我的gif太重了,我实际上是为我的应用程序预加载它).我目前的代码在Chrome和所有“现代浏览器”上运行得非常完美,但我也需要在IE11中工作,这就是斗争开始的地方.
这是一个示例代码,在Chrome上完美运行但在IE11上运行不正常:
function activate_gif(){
document.getElementById("img1").src = "https://i.imgur.com/Rsc0qOw.gif";
}
.myDiv{
width: 500px;
height: 300px;
}
.myDiv img{
width: 100%;
height: 100%;
}
<button onclick="activate_gif()">
Click me
</button>
<div class="myDiv">
<img id="img1" src="https://i.imgur.com/Rsc0qOw.gif">
</div>
你也可以在这个jsFiddle:https://jsfiddle.net/c6hodyh2/3/找到它
您可以找到问题的其他(非)工作示例(适用于Chrome,不适用于IE):https://codepen.io/InSightGraphics/pen/CAlci
到目前为止我尝试过的
尝试1
从this SO question开始,我尝试了以下JS代码,以“强制”缓存刷新:
function activate_gif(){
document.getElementById("img1").src = "";
document.getElementById("img1").src = "https://i.imgur.com/Rsc0qOw.gif";
}
结果:没有成功,它与我的原始代码完全没有不同的效果.
尝试2
从this article开始,我尝试刷新innerHTML内容:
function activate_gif(){
document.getElementById("img1").style.display = '';
document.getElementById("img1").innerHTML = document.getElementById("img1").innerHTML;
}
结果:IE没有变化,并且在其他浏览器中停止工作,所以我认为它触发了控制台错误.
尝试3
从this SO question开始,我尝试使用解决方案的简化版本,基本上是通过在源URL中添加随机后缀来强制再次加载图像:
function activate_gif(){
document.getElementById('myImg').src = 'mysrc.gif?' + Math.random();
}
结果:重新加载gif,它自己解决了缓存问题.但是,我在实际应用程序中使用的GIF太重,因此如果每次用户按下按钮时都要下载图像,则会导致用户体验不佳,特别是对于带宽较弱的用户.
尝试4
从@ IStepashka的回答中,我尝试先设置一个(随机的,在网上找到)空白图像,然后再设置原始来源:
function activate_gif(){
document.getElementById("img1").src = "https://i.ytimg.com/vi/f3cLOucMpD0/maxresdefault.jpg";
document.getElementById("img1").src = "https://i.imgur.com/Rsc0qOw.gif";
}
结果:与尝试1相同,它没有改变任何东西.我的代码仍在使用Chrome,但不适用于IE.
解决方法:
将GIF文件转换为视频并使用<video> HTML标记可能更合适.见Jeremy Wagner的Replace Animated GIFs with Video文章.但是如果你想坚持GIF,你可以使用XMLHttpRequest,Blob和对象URL给定CORS和缓存相关的HTTP标头是适当配置的:
function activate_gif(){
var url = "https://i.imgur.com/Rsc0qOw.gif";
var img = document.getElementById( "img1" );
var xhr = new XMLHttpRequest();
// Browser will take cached response if it has cache entry with url key.
xhr.open( "GET", url );
xhr.responseType = "blob";
xhr.onload = function() {
if ( xhr.status != 200 ) {
// Complain.
return;
}
var blobUrl = URL.createObjectURL( xhr.response );
img.src = blobUrl;
setTimeout( function () {
// Let browser display blob and revoke blob after stack unwind.
URL.revokeObjectURL( blobUrl );
}, 0 ); // You might need to increase delay time for large images.
};
xhr.send();
}
.myDiv{
width: 500px;
height: 300px;
}
.myDiv img{
width: 100%;
height: 100%;
}
<button onclick="activate_gif()">
Click me
</button>
<div class="myDiv">
<img id="img1" src="https://i.imgur.com/Rsc0qOw.gif">
</div>
您还可以使用浏览器检测在其他用户代理中使用更高效,更简单的代码.
有关更多信息,请检查
> MDN上的XMLHttpRequest.responseType页面
> MDN上的URL.createObjectURL()页面
> MDN上的Cross-Origin Resource Sharing (CORS)页面
> HTTP Caching Ilya Grigorik的文章.
> HTML5 video javascript controls – restart video关于StackOverflow的讨论
内容总结
以上是互联网集市为您收集整理的javascript – 重新启动gif而不在IE11中重新加载它全部内容,希望文章能够帮你解决javascript – 重新启动gif而不在IE11中重新加载它所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。