预加载老生常谈:

  1. funtion preLoadImages(imageArr){
  2. var self = this;
  3. var newimages=[], loadedimages=0
  4. var postaction=function(){} //此处增加了一个postaction函数
  5. var imageArr=(typeof imageArr!="object")? [imageArr] : imageArr
  6. function imageloadpost(){
  7. loadedimages++;
  8. self.resourceLoadedLength++;
  9. if (loadedimages==imageArr.length){
  10. postaction(newimages) //加载完成用我们调用postaction函数并将newimages数组做为参数传递进去
  11. }
  12. }
  13. for (var i=0; i<imageArr.length; i++){
  14. newimages[i]=new Image()
  15. newimages[i].src=imageArr[i]
  16. newimages[i].onload=function(){
  17. imageloadpost()
  18. }
  19. newimages[i].onerror=function(){
  20. imageloadpost()
  21. }
  22. }
  23. return { //此处返回一个空白对象的done方法
  24. done:function(f){
  25. postaction=f || postaction
  26. }
  27. }
  28. },
  29. funtion preLoadAudio(audioArr){
  30.  
  31. var self = this;
  32. var newAudio = [], loadedAudios = 0;
  33. var postaction=function(){} //此处增加了一个postaction函数
  34. var audioArr = (typeof audioArr !="object")? [audioArr ] : audioArr
  35. function audioLoadPost(){
  36. loadedAudios++;
  37. console.log(self.resourceLoadedLength);
  38. self.resourceLoadedLength++;
  39. if (loadedAudios==audioArr.length){
  40. postaction(newAudio) //
  41. }
  42. }
  43. for (var i=0; i<audioArr .length; i++){
  44. newAudio[i]=new Audio();
  45. newAudio[i].src = audioArr[i];
  46. newAudio[i].addEventListener('canplaythrough', ()=>{audioLoadPost()}, false);
  47. newAudio[i].addEventListener('error', ()=>{audioLoadPost()}, false);
  48. }
  49. return {
  50. done:function(f){
  51. postaction=f || postaction
  52. }
  53. }
  54. },

  

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

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

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

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

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

  1. $('audio').get(0) = newSrc;
  2. $('audio').get(0).load();//ios9
  3. $('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. toj 1421

    题意:假如存在矩阵A,A[i][0] + A[i][1] + ...... + A[i][n - 1] == SR[i],A[0][j] + A[1][j] + ...... + A[n - 1][j ...

  2. 刷新PHP缓冲区

    为你的站点加速_php技巧 在当前 PHP 版本的默认配置下,“输出缓冲(Output Buffering)”是被打开的.旧版本则不是这样,在旧版本的 PHP 中,字符串在每次被输出的时候(通过 ec ...

  3. php ip伪装访问

    打算做个采集,无记录下来备用 php的curl搞定ip伪装来采集内容.以前写过一段代码采集一个数据来处理.由于数据量过大,同一ip采集.经常被限制,或者列为黑名单.   写了段代码伪装ip,原理是,客 ...

  4. html简单实现下拉菜单

    主要用到的知识ul和li标签 ul li 是一个组合:是无序列表标签,在实际中用的非常多,与之对应的是有序列表:ol lili是不能单独使用,必须在于ul之中的ul是块级元素,能直接定义宽高,而li是 ...

  5. MYSQL 源码

    http://www.cnblogs.com/wingsless/tag/MySQL/

  6. c++ 双冒号的作用

    转:原文:http://www.cnblogs.com/charley_yang/archive/2011/02/24/1964217.html #define FLY 10 #line 100 &q ...

  7. c语言char 和int的问题

    参考:http://www.cnblogs.com/dire/p/5222968.html 参考baidu: char和int的定义我是清楚的,现在有一个问题: 1.设A和B是int型,C是char型 ...

  8. XMPP基本内容简单介绍

    即时通讯技术简单介绍 即时通讯技术(IM)支持用户在线实时交谈.假设要发送一条信息,用户须要打开一个小窗体,以便让用户及其朋友在当中输入信息并让交谈两方都看到交谈的内容.有很多的IM系统,如AOL I ...

  9. SharePoint 2013 关闭 customErrors

    在SharePoint 2013上做开发时,如果不把customErrors 关掉,那调试起来那真叫一个费劲.在2013里,关闭customErrors 和2010一样,只要把文件路径改成15目录下即 ...

  10. BNUOJ ->Borrow Classroom(LCA)

    B. Borrow Classroom Time Limit: 5000ms Memory Limit: 262144KB 每年的BNU校赛都会有两次赛前培训,为此就需要去借教室,由于SK同学忙于出题 ...