国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當(dāng)前位置:雨林木風(fēng)下載站 > 應(yīng)用軟件教程 > 詳細(xì)頁面

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

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

更新時(shí)間:2025-09-20 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

導(dǎo)微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應(yīng)用,它實(shí)現(xiàn)了應(yīng)用“觸手可及”的夢(mèng)想,用戶掃一掃或搜一下即可打開應(yīng)用。小程序是一種不用下載就能使用的應(yīng)用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應(yīng)用,它實(shí)現(xiàn)了應(yīng)用“觸手可及”的夢(mèng)想,用戶掃一掃或搜一下即可打開應(yīng)用。小程序是一種不用下載就能使用的應(yīng)用,也是一項(xiàng)門檻非常高的創(chuàng)新,經(jīng)過將近兩年的發(fā)展,已經(jīng)構(gòu)造了新的小程序開發(fā)環(huán)境和開發(fā)者生態(tài)。

本篇文章給大家?guī)淼膬?nèi)容是關(guān)于小程序加載器的實(shí)現(xiàn):按需預(yù)加載遠(yuǎn)程圖片資源,有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

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

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

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

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

原理介紹:

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

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

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

加載器用法:

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

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

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

使用示例:

1、載入文件:

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

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

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

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

new ImageLoader({
 base: ImageSource.BASE,
 source: [ImageSource],
 loading: res => {
 // 可以做進(jìn)度條動(dòng)畫
 console.log(res);
 },
 loaded: res => {
 // 可以加載完畢動(dòng)畫
 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目錄把每個(gè)頁面的遠(yuǎn)程資源寫入到對(duì)應(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ù)組方式把圖片堆放在一個(gè)數(shù)組里,如:

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

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

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

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

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

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

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

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

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

source: [ImageSource]

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

source: [ImageSource.imageList, ImageSource.single2]

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

最后,在加載過程中如果過于耗時(shí),可以選擇在每個(gè)頁面的onLoad里單獨(dú)加載資源,做法類似于在app里調(diào)用,本文的示例是寫在app.js的onLaunch中。如果加載時(shí)間過長可以做一個(gè)進(jìn)度條或者加載動(dòng)畫,優(yōu)化啟動(dòng)體驗(yàn)。預(yù)加載過的圖片會(huì)在微信內(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會(huì)立即顯示,不需要重新發(fā)起加載圖片請(qǐng)求。

相關(guān)推薦:

JS實(shí)現(xiàn)圖片預(yù)加載無需等待

又一個(gè)小巧的圖片預(yù)加載類_圖象特效

以上就是小程序加載器的實(shí)現(xiàn):按需預(yù)加載遠(yuǎn)程圖片資源的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


小程序是一種不需要下載安裝即可使用的應(yīng)用,它實(shí)現(xiàn)了應(yīng)用“觸手可及”的夢(mèng)想,用戶掃一掃或者搜一下即可打開應(yīng)用。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        国产精品亚洲专一区二区三区| 亚洲视频在线观看一区| 欧美高清性hdvideosex| 亚洲综合久久av| 欧美日韩夫妻久久| 日本午夜一区二区| 日韩欧美久久一区| 成人av高清在线| 亚洲成人手机在线| 日韩视频一区二区三区在线播放| 卡一卡二国产精品| 国产精品每日更新| 欧美日韩1区2区| 国产精品中文字幕欧美| 亚洲一级在线观看| 中文字幕不卡在线播放| 欧美日韩美少妇| 国产福利精品一区二区| 亚洲国产婷婷综合在线精品| 26uuu亚洲综合色| 色综合久久中文字幕综合网| 免费成人在线网站| 一区二区三区四区国产精品| 精品日韩一区二区三区免费视频| 成人午夜免费电影| 奇米色一区二区三区四区| 亚洲欧洲日韩av| 日韩情涩欧美日韩视频| 一本大道久久a久久综合| 另类欧美日韩国产在线| 亚洲人成亚洲人成在线观看图片| 日韩一区二区电影在线| 欧美吞精做爰啪啪高潮| 成人免费观看男女羞羞视频| 日本强好片久久久久久aaa| 国产精品拍天天在线| 精品国产露脸精彩对白| 欧美日韩亚洲另类| 欧美在线一区二区三区| 不卡的电影网站| 国产精品一区久久久久| 视频一区二区三区在线| 亚洲一区二区三区免费视频| 国产精品精品国产色婷婷| 久久嫩草精品久久久久| 欧美岛国在线观看| 日韩欧美aaaaaa| 日韩一区二区在线看| 91麻豆精品国产91久久久久久久久| 99re热视频精品| 成人性生交大片免费看中文| 国产一区二区三区美女| 国模娜娜一区二区三区| 精彩视频一区二区三区| 另类综合日韩欧美亚洲| 麻豆精品在线播放| 精品亚洲porn| 福利91精品一区二区三区| 国产ts人妖一区二区| 成人免费黄色大片| 一本大道久久精品懂色aⅴ| 91在线观看高清| 91福利国产精品| 欧美亚洲禁片免费| 日韩一二三区视频| 精品欧美一区二区在线观看| 精品久久久久久无| 国产精品成人一区二区三区夜夜夜| 国产日韩欧美精品在线| 国产精品久久久久四虎| 亚洲精品ww久久久久久p站| 亚洲网友自拍偷拍| 奇米一区二区三区av| 黑人巨大精品欧美一区| 国产在线视频一区二区| 国产高清亚洲一区| 一本大道av一区二区在线播放 | 欧美高清视频在线高清观看mv色露露十八| 不卡的av网站| 色综合久久88色综合天天6 | 色国产精品一区在线观看| 91看片淫黄大片一级| 日本高清不卡aⅴ免费网站| 欧美日高清视频| 精品国产一区二区三区av性色| 久久一夜天堂av一区二区三区| 久久精品一区四区| 亚洲品质自拍视频| 日韩成人午夜电影| 国产成人免费在线观看不卡| 成人精品gif动图一区| 91黄色激情网站| 日韩一区二区三区电影在线观看| 国产人伦精品一区二区| 亚洲一区二区美女| 成人午夜视频在线| 日韩欧美国产一二三区| 亚洲人123区| 国产精品一区二区三区网站| 欧美专区日韩专区| 国产日韩欧美麻豆| 热久久一区二区| 色综合久久久网| 中文字幕va一区二区三区| 蜜臀久久久久久久| 91影院在线免费观看| 久久亚区不卡日本| 日韩电影一区二区三区| 色婷婷精品久久二区二区蜜臀av | 精品久久免费看| 亚洲自拍偷拍网站| 国产精品主播直播| 91精品国产91久久综合桃花| 中文字幕一区二区在线播放| 奇米影视一区二区三区小说| 色偷偷88欧美精品久久久| 久久久青草青青国产亚洲免观| 亚洲午夜在线电影| 99r国产精品| 国产三级一区二区| 久久不见久久见中文字幕免费| 在线免费不卡视频| 午夜精品在线看| 成人18精品视频| 久久亚洲免费视频| 日韩电影免费一区| 欧美日韩国产高清一区| 亚洲影院理伦片| 色综合色狠狠天天综合色| 欧美韩国一区二区| 国产精品一区二区黑丝| 日韩一二在线观看| 精品一区二区在线观看| 欧美变态口味重另类| 日韩精品亚洲一区| 欧美日韩国产精品自在自线| 亚洲一区二区三区美女| 欧美三级电影在线看| 一区二区三区在线观看网站| 91亚洲国产成人精品一区二区三| 中文字幕av在线一区二区三区| 国产成人av一区二区三区在线观看| 久久综合视频网| 丁香婷婷深情五月亚洲| 国产精品第13页| 欧美少妇xxx| 奇米精品一区二区三区四区| 精品国产三级电影在线观看| 国产不卡视频一区| 亚洲黄一区二区三区| 欧美日韩国产高清一区二区| 爽好久久久欧美精品| 欧美精品一区二区在线播放 | 精久久久久久久久久久| 国产亚洲欧美一区在线观看| 成人免费视频视频在线观看免费| 1024精品合集| 91精品久久久久久蜜臀| 高清日韩电视剧大全免费| 亚洲男帅同性gay1069| 欧美精品高清视频| 国产精品一区二区三区99| 亚洲精品精品亚洲| 精品欧美乱码久久久久久| 99vv1com这只有精品| 日本女优在线视频一区二区| 中文一区在线播放| 91精品国产色综合久久ai换脸 | 久久99国产精品久久| 日本一区二区三区久久久久久久久不 | 亚洲成人动漫一区| 日韩视频中午一区| 91视频.com| 精品一区精品二区高清| 久久精品欧美日韩精品| 欧美午夜寂寞影院| 成人免费看视频| 麻豆精品一二三| 亚洲小少妇裸体bbw| 国产日本欧美一区二区| 欧美一区二区私人影院日本| 91免费视频大全| 国产精品一区二区你懂的| 日韩成人一级大片| 一区二区免费在线| 中文字幕在线不卡| 国产欧美一区二区三区在线老狼 | 777午夜精品免费视频| av电影天堂一区二区在线 | 国产成人在线视频网站| 视频一区二区三区中文字幕| 亚洲精品国产a久久久久久| 国产精品色一区二区三区| 欧美精品一区二区在线观看| 制服丝袜亚洲网站| 欧美日韩中文一区| 91久久精品网| 91年精品国产| 91在线小视频| caoporen国产精品视频|