摘要:我們用一些前端框架的這個控件類去顯示圖片。如果直接調(diào)用控件類的代碼那么在這張具體的圖片真正加載到本地之前,上顯示一片空白,這個用戶體驗不好。
這篇文章介紹一種使用代理設(shè)計模式(Proxy Design Pattern)的方法來改善您的前端應(yīng)用里圖片加載的體驗。
假設(shè)我們的應(yīng)用里需要顯示一張尺寸很大的圖片,位于遠(yuǎn)端服務(wù)器。我們用一些前端框架的Image這個控件類去顯示圖片。如果直接調(diào)用控件類的代碼
image.setSrc("http://www.bigfile.gif"), 那么在這張具體的圖片真正加載到本地之前,UI上顯示一片空白,這個用戶體驗不好。
我們?nèi)粘I钪衅鋵嵰呀?jīng)能感覺到,很多優(yōu)秀的前端應(yīng)用,在加載大尺寸圖片或者執(zhí)行其他費時的后臺操作時,前臺都會有一些動畫效果。
今天我們就來動手做一個類似的效果出來。
有一個按鈕。點了之后,會觸發(fā)一張大尺寸圖片的加載。
在這張圖片的加載過程中,一直顯示一張本地的gif圖片作為加載動畫:
加載完畢后,動畫消失,實際圖片才顯示出來(4.1MB大)。
項目完整代碼在我github上:
https://github.com/i042416/Fi...
看一些關(guān)鍵步驟。
1. Image控件定義在XML視圖里,ID為jerryImage。我用的SAP UI5前端框架。大家只要領(lǐng)會了思路,可以容易地遷移到其他任何前端框架去。
id為jerryButton的button控件,點擊事件處理函數(shù)onPress:
2. 再看控制器的代碼:onPress執(zhí)行l(wèi)oadImageWithProxy。
loadImageWithProxy調(diào)用injectProxy,傳入的輸入?yún)?shù)image就是XML視圖里定義的Image控件。
在injectProxy里,代碼第30行創(chuàng)建了一個隱藏的Image代理對象,然后在第36行用真實的Image控件去顯示本地的gif文件,以在UI上顯示出動畫效果,然后第37行用隱藏的Image代理對象去悄悄地加載大尺寸文件,這件事情終端用戶并不知情。等到這個大尺寸圖片加載完畢后,Image代理對象的onload回調(diào)函數(shù)會被瀏覽器觸發(fā),此時再讓真實的Image控件把加載好的大尺寸文件顯示出來。 效果就實現(xiàn)了。
要獲取更多Jerry的原創(chuàng)技術(shù)文章,請關(guān)注公眾號"汪子熙"或者掃描下面二維碼:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/98518.html
摘要:我們用一些前端框架的這個控件類去顯示圖片。如果直接調(diào)用控件類的代碼那么在這張具體的圖片真正加載到本地之前,上顯示一片空白,這個用戶體驗不好。 這篇文章介紹一種使用代理設(shè)計模式(Proxy Design Pattern)的方法來改善您的前端應(yīng)用里圖片加載的體驗。 假設(shè)我們的應(yīng)用里需要顯示一張尺寸很大的圖片,位于遠(yuǎn)端服務(wù)器。我們用一些前端框架的Image這個控件類去顯示圖片。如果直接調(diào)用控...
摘要:面向?qū)ο笤O(shè)計里的設(shè)計模式之代理模式,相信很多朋友已經(jīng)很熟悉了。代表當(dāng)前執(zhí)行方法的實例,即方法調(diào)用者。代表具體的方法名稱。現(xiàn)在我們再次調(diào)用,傳入構(gòu)造器返回的代理對象打印輸出,代理邏輯生效了和的一樣優(yōu)雅地實現(xiàn)了代理設(shè)計模式。 showImg(https://segmentfault.com/img/remote/1460000016760603);面向?qū)ο笤O(shè)計里的設(shè)計模式之Proxy(代理...
摘要:在代理模式中,我們將創(chuàng)建一個對象,該對象在在接口中持有原始對象,以對外部提供它的功能。實現(xiàn)我們將創(chuàng)建一個接口并且創(chuàng)建具體類實現(xiàn)接口。 原文鏈接譯者:smallclover希望對你們有所幫助,謝謝閱讀! 設(shè)計模式-代理模式 在代理模式中,我們使用一個類來代表另一個類的功能。這種類型的設(shè)計模式屬于結(jié)構(gòu)型設(shè)計模式的一種。在代理模式中,我們將創(chuàng)建一個對象,該對象在在接口中持有原始對象,以對外部...
摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗?dǎo)范式。函數(shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導(dǎo)范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強調(diào)減少對程序外部狀態(tài)產(chǎn)生改變的方式。因此,...
摘要:簡言之,我們認(rèn)為好的用戶體驗從快速的內(nèi)容傳輸開始,也就意味著性能美觀。每一步我們都在探討如何在獲得好的用戶體驗和保證設(shè)計美感的同時,最小化對性能的影響。字型子集設(shè)定到目前為止,子集設(shè)定是改善網(wǎng)頁字體性能最快的方式。 作者 Declan 原文鏈接 最近更新了我們的網(wǎng)站,它是經(jīng)過了設(shè)計上的全面驗收的。但實際上,作為軟件開發(fā)者,我們會注重很多技術(shù)相關(guān)的零碎的東西。我們的目標(biāo)是控制性能,注重性...
閱讀 1996·2021-11-23 10:08
閱讀 2326·2021-11-22 15:25
閱讀 3270·2021-11-11 16:55
閱讀 764·2021-11-04 16:05
閱讀 2577·2021-09-10 10:51
閱讀 704·2019-08-29 15:38
閱讀 1574·2019-08-29 14:11
閱讀 3481·2019-08-29 12:42