预加载老生常谈:

funtion preLoadImages(imageArr){
var self = this;
var newimages=[], loadedimages=0
var postaction=function(){} //此处增加了一个postaction函数
var imageArr=(typeof imageArr!="object")? [imageArr] : imageArr
function imageloadpost(){
loadedimages++;
self.resourceLoadedLength++;
if (loadedimages==imageArr.length){
postaction(newimages) //加载完成用我们调用postaction函数并将newimages数组做为参数传递进去
}
}
for (var i=0; i<imageArr.length; i++){
newimages[i]=new Image()
newimages[i].src=imageArr[i]
newimages[i].onload=function(){
imageloadpost()
}
newimages[i].onerror=function(){
imageloadpost()
}
}
return { //此处返回一个空白对象的done方法
done:function(f){
postaction=f || postaction
}
}
},
funtion preLoadAudio(audioArr){ var self = this;
var newAudio = [], loadedAudios = 0;
var postaction=function(){} //此处增加了一个postaction函数
var audioArr = (typeof audioArr !="object")? [audioArr ] : audioArr
function audioLoadPost(){
loadedAudios++;
console.log(self.resourceLoadedLength);
self.resourceLoadedLength++;
if (loadedAudios==audioArr.length){
postaction(newAudio) //
}
}
for (var i=0; i<audioArr .length; i++){
newAudio[i]=new Audio();
newAudio[i].src = audioArr[i];
newAudio[i].addEventListener('canplaythrough', ()=>{audioLoadPost()}, false);
newAudio[i].addEventListener('error', ()=>{audioLoadPost()}, false);
}
return {
done:function(f){
postaction=f || postaction
}
}
},

  

      //用法:
preLoadImages(imageArr).done(()=>{
//加载完成之后的代码 })

   但是,ios上的safari不支持提前加载audio,图片是支持的。PC端safari都支持。

还有,为了给用户节约流量,无论PC还是ios,safari都不支持audio(音频)自动播放,所以产生了safari不能自动播放音频的问题,解决方式是:引导用户点击屏幕某块区域,然后播放:

$(document).on('click touchstart','.start-button', function() {
$('audio').get(0).load();//ios9
$('audio').get(0).play();
})

如果有多个音频需要自动播放,2个解决方式:
       1.多个音频合并成一个,分段播放
       2.不断更换用户的点击后触发的那个音频的src

$('audio').get(0) = newSrc;
$('audio').get(0).load();//ios9
$('audio').get(0).play();

  

关于图片和auido预加载的更多相关文章

  1. 《前端之路》之 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏

    目录 09: 前端图片 类型 & 优化 & 预加载 & 懒加载 & 骨架屏 09: 前端图片 类型 & 优化 & 预加载 & 懒加载 & ...

  2. Javascript图片预加载详解

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  3. js图片预加载

    图片预加载有大体有几种方式 1.html标签或css加载图片. 显而易见我们使用img标签或者通过标签的background-image属性都可以实现图片的预加载.但是为了避免初次载入过多图片影响体验 ...

  4. 利用CSS、JavaScript及Ajax实现图片预加载的三大方法

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  5. CSS和JavaScript以及Ajax实现预加载图片的方法及优缺点分析

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画 廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发 ...

  6. 利用CSS、JavaScript及Ajax实现图片预加载的三大方法(转)

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  7. Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  8. 图片预加载 js css预加载

    图片预加载, 效果非常明显, 特别是有多个图, 方法很简单 , 体验提升了不少 <div class="hidden">        <script type= ...

  9. 利用CSS、JavaScript及Ajax实现图片预加载的三大方法及优缺点分析

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

随机推荐

  1. noip模拟赛 公交车

    题目描述LYK在玩一个游戏.有k群小怪兽想乘坐公交车.第i群小怪兽想从xi出发乘坐公交车到yi.但公交车的容量只有M,而且这辆公交车只会从1号点行驶到n号点.LYK想让小怪兽们尽可能的到达自己想去的地 ...

  2. noip模拟赛 fateice-string

    题目背景 Aldnoah ——火星上超古代文明留下的能量源,承认初代火星移民雷伊·雷加利亚博士(即后来的薇瑟帝国初代皇帝)为正统继承者,启动因子融入皇族的遗传因子中,只有皇族天生具有Aldnoah的启 ...

  3. 超经典SQL练习题,做完这些你的SQL就过关了

    使用方法:我用的数据库是 Ms SQL Server 2008 ,练习时应当自己建数据,自己先思考,切勿急躁翻答案!否则效果减半,做完这些,恭喜你,你的 SQL 就算过关了. 测试表格 --1.学生表 ...

  4. Spring MVC的@RequestMapping多个URL映射到同一个方法

    @RequestMapping可以是一个URL对应一个方法,也可以多个URL对应同一个方法,写法如下: @RequestMapping(value={"url","res ...

  5. jQuery Validate 使用

    jQuery Validate 使用 <script src="js/b/js/jquery.validate.js"></script> <styl ...

  6. [PWA] Optimize Assets Delivery using preload and prefetch

    By default, browsers load the assets in a render-blocking way. Modern browsers introduced prefetch a ...

  7. [Debug] Use Remote Sources to Debug a Web App on an Emulator, Simulator, or Physical Device

    We can emulate different operating systems, browsers, and devices within a desktop operating system. ...

  8. javascript正則表達式

    定义一个正則表達式 能够用字面量 var regex = /xyz/; var regex = /xyz/i; 也能够用构造函数 var regex = new RegExp('xyz'); var ...

  9. 专业函数画图软件Origin

    首先:Origin软件已经是科研院所等单位的必备工作软件之中的一个,之所以大家讨论得较少,有可能并非其上手难度低.而是这些使用人群的学习理解能力要相对高一点吧: 其次:Excel不垃圾,但在函数画图方 ...

  10. java调用c++ dll出现中文乱码

    近期的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C++代码对文件进行操作. 在调用中假设路径中包括有中文字符就会出现故障.程序执行就会中止. 以下用一个小样例,来说明记 ...