• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > 利用简洁的图片预加载组件提升html5移动页面的用户体验 _html5教程技巧

利用简洁的图片预加载组件提升html5移动页面的用户体验 _html5教程技巧

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含h5用户体验,h5,组件等相关知识,匿名希望在学习及工作中可以帮助到您
在做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未加载出来的情况,这种问题虽然不影响页面的功能,但是不利于用户体验。抛开网速的原因,解决这个问题有多方面的思路:最基本的,要从http请求合并,缓存管理,图片压缩等方面做性能优化;另外就是可以对页面里用到的所有图片做预加载的处理,当用户打开页面的时候不立即显示第一屏,而是先显示资源加载效果,等到加载完毕,再来显示页面的主内容,这样就能解决那个问题。虽然这种加载效果占用了用户的浏览时间,但是我们可以把它做的好看有趣一点,所以也不会影响用户体验。本文实践了这种想法,提供一个非常简洁的图片预加载组件,实现简单,功能不弱,在做移动页面的时候应该对你有参考价值。
效果:

1. 实现思路

html里面的img标签和css中background-imag等都会触发浏览器去加载相关的图片,但是如果这个图片已经加载过了的话,浏览器就会直接使用这张已经加载好的图片,从而能够瞬间在页面中渲染出来。通过javascript,创建Image对象,然后把这些对象的src属性设置成要加载的图片地址也能触发浏览器加载图片,利用这一点就能实现图片预加载的功能:在页面里首先把那些用到了相关的图片的元素给藏掉,然后用js去加载图片,等到所有图片加载完毕再把藏掉的元素显示即可。不过这仅仅是一个基本的实现思路,要完成一个功能较健壮的预加载组件,还有以下三个问题:
1)进度问题
由于预加载的同时,还得做一个预加载的效果,这就需要把加载的进度实时通知到外部上下文才行。关于进度有两个实现方式,第一是已加载的数据大小/总的数据大小,第二是已加载的文件数/总的文件数,在浏览器里面,采用第一种方式是不现实的,根本没有原生的办法可以做到,所以只能采用第二种。
2)图片加载失败的问题
比如说有4张图片,已经加载了50%,在加载第三张的时候出错了,该不该将进度反馈成75%呢?答案是:应该。如果不这么处理的话,进度永远无法到100%,页面主内容就没机会显示了,虽然图片加载有失败的情况,但是跟加载器没有关系,也许图片本身就不存在呢?也就是说图片加载失败不应该影响加载器的功能。
3)图片加载超时的问题
图片不能加载太久,否则用户一直停留在加载效果上看不到主内容,用户的等待时间不可控制地延长,导致用户体验下降,这样就有悖加载器的初衷了。所以应该给每个图片设置一个加载的超时时间,如果在所有图片的超时时间之后,还没加载完,就应该主动放弃加载,通知外部上下文加载完毕,显示主内容。
综合以上这些需求,本文提供的实现是:

  1. (function () {
  2. function isArray(obj) {
  3. return Object.prototype.toString.call(obj) === '[object Array]';
  4. }
  5. /**
  6. * @param imgList 要加载的图片地址列表,['aa/asd.png','aa/xxx.png']
  7. * @param callback 每成功加载一个图片之后的回调,并传入“已加载的图片总数/要加载的图片总数”表示进度
  8. * @param timeout 每个图片加载的超时时间,默认为5s
  9. */
  10. var loader = function (imgList, callback, timeout) {
  11. timeout = timeout || 5000;
  12. imgList = isArray(imgList) && imgList || [];
  13. callback = typeof(callback) === 'function' && callback;
  14. var total = imgList.length,
  15. loaded = 0,
  16. imgages = [],
  17. _on = function () {
  18. loaded < total && (++loaded, callback && callback(loaded / total));
  19. };
  20. if (!total) {
  21. return callback && callback(1);
  22. }
  23. for (var i = 0; i < total; i++) {
  24. imgages[i] = new Image();
  25. imgages[i].onload = imgages[i].onerror = _on;
  26. imgages[i].src = imgList[i];
  27. }
  28. /**
  29. * 如果timeout * total时间范围内,仍有图片未加载出来(判断条件是loaded < total),通知外部环境所有图片均已加载
  30. * 目的是避免用户等待时间过长
  31. */
  32. setTimeout(function () {
  33. loaded < total && (loaded = total, callback && callback(loaded / total));
  34. }, timeout * total);
  35. };
  36. "function" === typeof define && define.cmd ? define(function () {
  37. return loader
  38. }) : window.imgLoader = loader;
  39. })();

使用方式(对应代码中的test.html):

  1. <script src="../js/imgLoader.js">script>
  2. <script>
  3. imgLoader(['../img/page1.jpg', '../img/page2.jpg', '../img/page3.jpg'], function(percentage){
  4. console.log(percentage)
  5. });
  6. script>

运行结果:


2. demo说明
本文开篇给出的效果,对应的页面是index.html,关于这个效果还有两个问题需要说明:
1)它用了之前这篇博客Hammer.js+轮播原理实现简洁的滑屏功能介绍的滑屏思路,并把它的一些逻辑包装在了swipe.js,对外提供了一个全局变量Swipe,这个模块有一个init的方法,以便外部通过调用Swipe.init()就能初始化滑屏相关的功能,原来没有提供这个init方法,在js加载完毕就会初始化滑屏功能,有了这个init方法就可以把滑屏的逻辑延迟到加载完毕的时候去初始化。index.html一共引用了5个js:

  1. <script src="js/zepto.js">

您可能想查找下面的文章:

  • 利用简洁的图片预加载组件提升html5移动页面的用户体验
  • 利用简洁的图片预加载组件提升html5移动页面的用户体验 _html5教程技巧

相关文章

  • 2018-12-03用HTML5中的Canvas结合公式绘制粒子运动的教程_html5教程技巧
  • 2018-12-03HTML5中如何调用手机重力感应的接口
  • 2018-12-03基于html5实现的图片墙效果_html5教程技巧
  • 2018-12-03弹性盒模型 flex box的认知与使用
  • 2017-08-06HTML5 history新特性pushState、replaceState及两者的区别
  • 2017-08-06html特殊符号示例 html特殊字符编码对照表
  • 2018-12-03知乎前端都用了哪些优化方法?
  • 2018-12-03HTML5之window.postMessage API
  • 2018-12-03怎样操作页面、可视区、屏幕等宽高属性
  • 2018-12-03canvas使用注意点总结_html5教程技巧

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • Web时代变迁及html5与html4的区别
    • H5的定时器requestAnimationFrame使用技巧
    • 有关跨域通信的文章推荐10篇
    • 基于HTML5 Canvas 实现弹出框效果
    • 《实用技巧》—让你的网站变成响应式的3个简单步骤
    • input file上传文件样式支持html5的浏览器解决方案_html5教程技巧
    • HTML5手机端弹出遮罩菜单特效代码
    • 利用纯html5绘制出来的一款非常漂亮的时钟_html5教程技巧
    • html5+css3实现一款注册表单实例
    • HTML5的结构和语义(2):结构

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有