这篇文章介绍一种使用代理设计模式(Proxy Design Pattern)的方法来改善您的前端应用里图片加载的体验。前端
假设咱们的应用里须要显示一张尺寸很大的图片,位于远端服务器。咱们用一些前端框架的Image这个控件类去显示图片。若是直接调用控件类的代码git
image.setSrc("http://www.bigfile.gif"), 那么在这张具体的图片真正加载到本地以前,UI上显示一片空白,这个用户体验很差。github
咱们平常生活中其实已经能感受到,不少优秀的前端应用,在加载大尺寸图片或者执行其余费时的后台操做时,前台都会有一些动画效果。设计模式
今天咱们就来动手作一个相似的效果出来。浏览器
有一个按钮。点了以后,会触发一张大尺寸图片的加载。前端框架
在这张图片的加载过程当中,一直显示一张本地的gif图片做为加载动画:服务器
加载完毕后,动画消失,实际图片才显示出来(4.1MB大)。框架
项目完整代码在我github上:函数
https://github.com/i042416/FioriODataTestTool2014/tree/master/WebContent/buttontutorial/view动画
看一些关键步骤。
1. Image控件定义在XML视图里,ID为jerryImage。我用的SAP UI5前端框架。你们只要领会了思路,能够容易地迁移到其余任何前端框架去。
id为jerryButton的button控件,点击事件处理函数onPress:
2. 再看控制器的代码:onPress执行loadImageWithProxy。
loadImageWithProxy调用injectProxy,传入的输入参数image就是XML视图里定义的Image控件。
在injectProxy里,代码第30行建立了一个隐藏的Image代理对象,而后在第36行用真实的Image控件去显示本地的gif文件,以在UI上显示出动画效果,而后第37行用隐藏的Image代理对象去悄悄地加载大尺寸文件,这件事情终端用户并不知情。等到这个大尺寸图片加载完毕后,Image代理对象的onload回调函数会被浏览器触发,此时再让真实的Image控件把加载好的大尺寸文件显示出来。 效果就实现了。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码: