一级片大奶子_色又黄又爽18禁免费视频_热久久久久久久_久久久精品一区二区_日韩av不卡在线播放_精品国内自产拍在线观看视频

注冊登錄

小程序遠(yuǎn)程圖片資源按需預(yù)加載

2018-09-20
導(dǎo)讀:最近做H5開發(fā)遇到個問題,為了防止頁面打開時,出現(xiàn)大圖加載緩慢的情況,寫了一個圖片資源管理器,今天順便實(shí)現(xiàn)了一下小程序版。 特別說明一下,小程序由于資源包大小限制,很...

最近做H5開發(fā)遇到個問題,為了防止頁面打開時,出現(xiàn)大圖加載緩慢的情況,寫了一個圖片資源管理器,今天順便實(shí)現(xiàn)了一下小程序版。

特別說明一下,小程序由于資源包大小限制,很多圖片資源會存放到CND圖片服務(wù)器上,為了實(shí)現(xiàn)小程序初始化時按需加載遠(yuǎn)程圖片資源,實(shí)現(xiàn)了以下加載器,希望能解決部分小程序新人開發(fā)者預(yù)加載圖片的苦惱。

特別強(qiáng)調(diào):

本加載器為初級版本,暫未研究其他實(shí)現(xiàn)方式,當(dāng)前實(shí)現(xiàn)方式需要在微信公眾平臺->設(shè)置->downloadFile合法域名,中添加想要加載的圖片所在服務(wù)器合法域名。

原理介紹:

使用小程序自帶API讀取遠(yuǎn)程圖片資源:

 

wx.getImageInfo({
 src: 'images/a.jpg',
 success: function (res) {
 console.log(res.width)
 console.log(res.height)
 }
}) 

 

這個接口可以創(chuàng)建圖片組件對象并返回圖片加載狀態(tài)。

加載器用法:

1、在app.js的同級目錄下創(chuàng)建一個ImageSource.js作為圖片資源的路徑管理文件(可以根據(jù)情況改為其他文件名稱)。

2、在utils文件夾下放入ImageLoader.js或ImageLoader.min.js(附件)。

3、根據(jù)需要在對應(yīng)的文件中創(chuàng)建ImageLoader對象(看下文)。

使用示例:

1、載入文件:

 

const ImageLoader = require('./utils/ImageLoader.min.js');
const ImageSource = require('./imageSource.js');

 

ImageLoader.min.js 為加載器源文件。

imageSource.js 為圖片資源路徑文件。

2、創(chuàng)建ImageLoader對象。

 

new ImageLoader({
 base: ImageSource.BASE,
 source: [ImageSource],
 loading: res => {
 // 可以做進(jìn)度條動畫
 console.log(res);
 },
 loaded: res => {
 // 可以加載完畢動畫
 console.log(res);
 }
 });

 

參數(shù)

base : String 圖片資源的基礎(chǔ)路徑 必填 示例: "https://image.example.com/static/images/"

source : Array 需要預(yù)加載的圖片資源 必填 示例: [ImageSource.banners, ImageSource.imageList]

loading : function 圖片加載中的回調(diào)方法 非必填 示例:

loaded : funciton 圖片記載完成后的回調(diào) 非必填 示例:

加載器(ImageLoader.js)源碼:

 

let base = 0;
let Img = function(src) {
 this.src = src;
 this.status = false;
 this.fail = false;
}
 
let loop = (o, res) => {
 let tem = Object.keys(o);
 tem.map(v => {
 if (typeof o[v] === 'object') {
 loop(o[v], res);
 } else {
 if(v === 'BASE') {
 base = o[v];
 } else {
 res.push(o[v]);
 }
 }
 });
}
 
function ImageLoader(obj) {
 let arr = [];  if(obj.loading) {
 this.loadingcallback = obj.loading;
 }
 if(obj.loaded) {
 this.loadedcallback = obj.loaded;
 }
 
 if(obj.base) {
 base = obj.base
 }
 this.insert = (item) => {
 arr.push(item);
 };
 
 this.init = (o) => {
 let res = [];
 loop(o, res);
 console.log(res)
 res.map((v) => {
 this.insert(new Img(v));
 });
 this.load();
 };
 
 this.load = () => {
 this.start = (new Date).getTime();
 arr.map((v) => {
 let src = base ? base + v.src: v.src;
 wx.getImageInfo({
 src: src,
 success: res => {
 v.status = true;
 },
 fail: err => {
 v.fail = true;
 }
 })
 });
 let timer = setInterval(() => {
 let status = this.isLoaded();
 if (status) {
 clearTimeout(timer);
 }
 }, 200);
 
 setTimeout(() => {
 clearTimeout(timer);
 }, 60000);
 };
 
 this.isLoaded = () => {
 let status = true,
 count = 0,
 fail = 0;
 arr.map((v) => {
 if (!v.status) {
 status = false;
 } else {
 count += 1;
 }
 if(v.fail) {
 status = true;
 fail += 1;
 }
 });
 if(status) {
 if(this.loadedcallback) {
 this.loadedcallback({
 status: true,
 timecost: (new Date).getTime() - this.start,
 success: count,
 fail: fail,
 totalcount: arr.length
 })
 }
 } else {
 if(this.loadingcallback) {
 this.loadingcallback({
 status: false,
 percent: count / arr.length
 });
 }
 }
 return status;
 };
 if(obj.source) {
 this.init(obj.source);
 }
}
module.exports = ImageLoader

 

圖片資源路徑文件(imageSource.js)源碼:

 

module.exports = {
 "BASE": "https://img.caibeitv.com/static_project/teacherTest/static/img/",
 "single1": "ghost.4449aa4.png",
 "single2": "ghost.4449aa4.png",
 "single3": "ghost.4449aa4.png",
 "single4": "ghost.4449aa4.png",
 "pages": {
 "index": ["ghost.4449aa4.png", "ghost.4449aa4.png"],
 "user": ["ghost.4449aa4.png", "ghost.4449aa4.png"],
 "home": ["ghost.4449aa4.png", "ghost.4449aa4.png"],
 "login": ["ghost.4449aa4.png", "ghost.4449aa4.png"]
 },
 "imageList": [
 "ghost.4449aa4.png",
 "ghost.4449aa4.png",
 "ghost.4449aa4.png",
 "ghost.4449aa4.png",
 "ghost.4449aa4.png"
 ],
 "folders": {
 "page1": "ghost.4449aa4.png",
 "page2": "ghost.4449aa4.png",
 "inner": [
 "ghost.4449aa4.png",
 "ghost.4449aa4.png"
 ],
 "home": {
 "poster": "ghost.4449aa4.png"
 }
 }
}

 

說明:

BASE 字段必填 根據(jù)自我需要填寫。

其他圖片資源支持:

1、直接key:value形式把圖片路徑寫入,如:

 

"single1": "ghost.4449aa4.png" 

 

2、類似于pages目錄把每個頁面的遠(yuǎn)程資源寫入到對應(yīng)位置下,方便引用和管理,如:

 

"pages": {
 "index": ["ghost.4449aa4.png", "ghost.4449aa4.png"],
 "user": ["ghost.4449aa4.png", "ghost.4449aa4.png"],
 "home": ["ghost.4449aa4.png", "ghost.4449aa4.png"],
 "login": ["ghost.4449aa4.png", "ghost.4449aa4.png"]
 },

 

3、直接以數(shù)組方式把圖片堆放在一個數(shù)組里,如:

 

"imageList": [
 "ghost.4449aa4.png",
 "ghost.4449aa4.png",
 "ghost.4449aa4.png",
 "ghost.4449aa4.png",
 "ghost.4449aa4.png"
 ] 

 

4、隨意的資源數(shù)組,對象嵌套,如:

 

"folders": {
 "page1": "ghost.4449aa4.png",
 "page2": "ghost.4449aa4.png",
 "inner": [
 "ghost.4449aa4.png",
 "ghost.4449aa4.png"
 ],
 "home": {
 "poster": "ghost.4449aa4.png"
 }
 }

 

這樣就完成了整個遠(yuǎn)程圖片資源加載器的配置,可以在new ImageLoader() 對象的 loading, loaded回調(diào)中看到圖片預(yù)加載的最終狀態(tài)status,數(shù)量totalcount,成功加載的圖片數(shù)量success,加載失敗的圖片數(shù)量fail, 加載圖片的總計(jì)耗時timecost(單位ms)。

創(chuàng)建ImageLoader對象時source字段的說明:

 

new ImageLoader({
base: ImageSource.BASE,
source: [ImageSource],
loading: res => {
// 可以做進(jìn)度條動畫
console.log(res);
},
loaded: res => {
// 可以加載完畢動畫
console.log(res);
}
});

 

source字段接受一個Array類型的參數(shù),以上文中imageSource.js中的配置來說,寫了很多不同格式的數(shù)據(jù),使用

 

const ImageSource = require('./imageSource.js');

 

引入后,可以直接使用ImageSource來讀取各個部分的數(shù)據(jù),因此在配置source字段時可以直接把整個ImageSource對象放入進(jìn)去

 

source: [ImageSource]

 

也可以根據(jù)項(xiàng)目需要只加載其中一部分資源,如:

 

source: [ImageSource.imageList, ImageSource.single2]

 

這樣加載器在執(zhí)行時就會只載入source中寫入的部分,而不是整個ImageSource。

最后,在加載過程中如果過于耗時,可以選擇在每個頁面的onLoad里單獨(dú)加載資源,做法類似于在app里調(diào)用,本文的示例是寫在app.js的onLaunch中。如果加載時間過長可以做一個進(jìn)度條或者加載動畫,優(yōu)化啟動體驗(yàn)。預(yù)加載過的圖片會在微信內(nèi)存中緩存一到小程序進(jìn)程被關(guān)閉,因此在隨后的頁面里可以直接使用圖片。

 

const app = getApp();
const imgSource = require('../../imageSource.js');
Page({
 data: {
 base: imgSource.BASE,
 src: imgSource.single1
 },
 onLoad: function () {
 console.log(imgSource)
 }
})

 

頁面上的Image會立即顯示,不需要重新發(fā)起加載圖片請求。個人研究結(jié)果,如有錯誤、不足歡迎批評指正,相互探討。個人QQ: 837195936 熊

重磅推薦:小程序開店目錄

第一部分:小商店是什么

第二部分:如何開通一個小商店

第三部分:如何登錄小商店

第四部分:開店任務(wù)常見問題

第五部分:小商店可以賣什么

第六部分:HiShop小程序特色功能

第七部分:小程序直播

第八部分:小程序收貨/物流

第九部分:小程序怎么結(jié)算

第十部分:小程序客服

第十一部分:電商創(chuàng)業(yè)

第十二部分:小程序游戲開發(fā)

電話咨詢 微信咨詢 預(yù)約演示 0元開店
主站蜘蛛池模板: 久久国产毛片|成人午夜免费网站|久久久=av影视|男同性恋视频在线观看|欧美一级日韩一级|久草免费在线播放 | 亚洲欧美一区二区精品中文字幕|免费=av网站在线|国产=av日韩=a∨亚洲=av|成年=a级毛片免费观看|五月丁香六月综合缴情基地|日本又黄又粗暴的gif动态图 | 久草在线|粉嫩=av一区二区在线播放免费|丁香五月天综合缴情网|激情五月俺也去狠狠爱|天天做夜夜爱|欧美专区亚洲 | 精品乱久久|www亚洲成人|麻豆91爱爱|99日韩精品|免费看日韩大片|国产精品视频一区视频二区 | 国产精品视频不卡|中文幕无线码中文字夫妻|免费人成再在线观看视频|处女影院|一区二区三区视频在线|99热精国产这里只有精品 | 免费观看亚洲|日韩精品色呦呦|综合色婷婷|国产69精品久久久久毛片|黑人操亚洲女人|在线无码视频观看草草视频 | 国产黑人在线|日韩免费在线观看|99视频这里只有|麻豆国产一区|亚洲GV天堂无码男同在线观看|亚洲=aV中文无码字幕色三 | 一本一道波多野毛片中文在线|久久久久久久久久亚洲精品|高潮又爽又黄又无遮挡免费软件|57p=ao国产成永久免费视频|在线国产欧美|九草=av | 亚洲天天干|女人十八一级毛片|www.四虎影院在线观看|911精产国品一二三区在线观看|欧美性猛交|久久久久久久岛国免费网站 | 台湾久久网|99久久精品免费看国产四区|亚洲一区二区三区在线视频观看|一区二区三区四区在线免费视频|红桃视频二区|国产久艹视频 | 蜜芽=aV无码精品国产午夜|日本高清一二三区视频在线|十八禁裸体WWW网站免费观看|浪潮=av色综合久久加勒比|99精品国产在热久久无毒|精品国产免费人成在线观看 | 婷婷综合久久狠狠色99H|精品国偷自产在线视频99|999久久久无码国产精品|国产精品一区二三区|激情中文小说区图片区|国产亚洲日 | 成人午夜久久|成人久久18免费网站麻豆|国产精品免费一区二区三区在线观看|男人天堂黄色|蜜臀二区|www亚洲免费 | 午夜精品久久久久久99热软件|久久一区视频|午夜精品视频在线观看|亚洲福利午夜|麻豆精产国品一二三区别网站|国产乱子伦视频在线播放 | 性一交一乱一精一晶|国产精品毛片=av在线看|妖精动漫免费观看完整动漫|精品国产香蕉在线观看|jizzcom日本|日本一级视频 | 91在线官网|亚洲日韩乱码中文无码蜜桃|仙武帝尊700集在线观看|99热精品首页|99九九精品视频|日韩超碰 | 亚洲国产精品无码第一区二区三区|十大免费最污的软件|玖玖99视频|激情动漫在线观看|#NAME?|蝌蚪视频窝在线播放 | 成本人片在线观看免费网站|成年人视频网站在线|夜趣福利视频|免费观看的=av在线播放|亚洲欧美偷国产日韩|四虎.com | 美女视频黄=a视频免费全程软件=axs|忘忧草在线影院两性视频|久久人妻内射无码一区三区|亚洲精品一区在线观看|日韩精品国产一区二区|中文字幕久精品免 | 中国=av在线免费观看|麻豆色播|一级毛片视频在线|一级免费片|毛片在线免费视频|中国一级女人毛片 | 大胆L少妇BBBBBB流水|欧美操日韩|麻豆视传媒精品=aV|大地资源色婷婷视频在线|亚洲影视一区二区三区|成年男女免费视频在线观看不卡 | 国产精品九九九九九九九|我征服了仪态端庄的物理老师|最新中文字幕在线|久久成人啪啪性教育|#NAME?|欧美大香线蕉线伊人久久 | 天天干在线播放|成人国内精品视频在线观看|最近2019年中文字幕大全|亚洲一区免费在线观看|久久青青草原亚洲=aV无码麻豆|三区四区 | 三级日韩|亚洲=aⅴ在线|成人精品玖玖资源在线播放|黄网在线免费观看|免费观看又色又爽又湿的软件|奇米四色888 | 好男人日本社区www|国产精品乱码一区二三区小蝌蚪|欧亚精品一区|国产欧美在线免费观看|我爱草逼网|乱码专区一卡二卡国色天香 | 免费=av成人|無碼噴水國產高潮=aV|www.91麻豆|亚洲欧美视频一级|欧美一站二站|91在线日本 | 免费线上=av|成人欧美精品一区二区|色人阁网站|欧美精品一区二区免费视频|日韩综合色|国产黄色精品视频 | 99精品久久久久久久免费看蜜月|伊人久久大香线蕉无码不卡|免费观看的黄色片|99久热re在线精品996热视频|在线=a免费观看|337P日本大胆欧美裸体艺术 | 欧美人与禽猛交乱配|黑人添美女bbb添高潮了|91久久精品日日躁夜夜躁国产|99久久婷婷国产综合亚洲|久久影院视频免费|成人在线视屏 | 欧美人人|91精品久久久久久综合|日本一区二区三区视频视频|欧美老熟妇乱子伦视频|91精品国产99久久久久|国产不卡三区 | 国产欧美一区二区三区在线|朋友的丰满人妻中文字幕|中文字幕乱伦视频|日韩黄色三级|台湾综合色|伊人影院久久 国产麻豆另类=aV|极品久久久久|桃花色综合影院|国产夜恋视频在线观看|美女=av免费在线观看|久久久国产一区二区三区四区 | 国产无码免费视频|色天使色妺姝在线视频|国产一级黄|777婷婷|成在线人=av免费无码高潮喷水|无码精品久久久久久人妻中字 | 午夜特片|中文久久久久|亚洲精品美女色诱在线播放|大地资源在线观看视频在线|99久久婷婷国产综合精品免费|豪放女大兵免费观看bd www欧美精品|成全在线观看免费高清动漫|富婆推油偷高潮叫嗷嗷叫|久久做受WWW|韩国羞羞|日韩亚洲欧美中文三级 | 久草国产精品视频|综合日韩天天久久一本|精品国产性色无码=av网站|国产极品福利在线|国产精品白丝喷水JK娇喘视频|免费xxxxx在线观看网站软件 色综合久久综合中文综合网|午夜福利国产在线观看1|毛片免费视频观看|黑人把女人弄到高潮视频|www.国产精品视频|免费色网 久久网国产|国产精品久99|国产hsck在线亚洲|性导航唐人社区|久久精品国产亚洲=aV高清色欲|久久99精品久久久久久久夜夜爽 | 一级影片在线观看|亚洲精品久久久久9999吃药|免费毛片wwwcomcn|91一级片|超碰人人精品|GOGO亚洲肉体艺术 | 91日韩免费|日本精品视频|免费的又色又爽又黄的片|无码视频一区二区三区|日韩成人无码网|亚州欧美一区二区 | 毛片免费全部播放无码私人|夜夜爽狠狠澡97欧美精品|日韩中文一区二区三区|欧美孕交videosfree黑人巨大|丰满少妇女人=a毛片视频|国产SUV精品一区二区 | 久久伊人精品|91精品色|精产国品一区二区三区四区|日韩影视在线|国产男女猛烈无遮挡免费视频网站|成品片=a免免费人看 | 国语精品对白露脸少妇网站|快好爽射给我视频|国产熟妇另类久久久久久|在线看免费视频|www久久九|亚洲综合欧美另类 | VIDEOSGR=aIS欧美另类|爱看=av在线入口|在线视频成人|再来一次在线观看完整视频|91精品国产92久久久|成人爽=a毛片免费啪啪 | 青青手机在线视频|18男女无套免费视频|国产亚洲1区2区3区|日韩欧美在线综合网|疯狂的欧美乱大交|www四虎 |