在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當前位置:雨林木風下載站 > 應用軟件教程 > 詳細頁面

小程序加載器的完成:按需預加載遠程圖片資源

小程序加載器的完成:按需預加載遠程圖片資源

更新時間:2025-09-20 文章作者:未知 信息來源:網絡 閱讀次數:

微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一...
微信小程序,簡稱小程序,英文名Mini Program,是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或搜一下即可打開應用。小程序是一種不用下載就能使用的應用,也是一項門檻非常高的創新,經過將近兩年的發展,已經構造了新的小程序開發環境和開發者生態。

本篇文章給大家帶來的內容是關于小程序加載器的實現:按需預加載遠程圖片資源,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

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

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

特別強調:

本加載器為初級版本,暫未研究其他實現方式,當前實現方式需要在微信公眾平臺->設置->downloadFile合法域名,中添加想要加載的圖片所在服務器合法域名。

原理介紹:

使用小程序自帶API讀取遠程圖片資源:

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

這個接口可以創建圖片組件對象并返回圖片加載狀態。

加載器用法:

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

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

3、根據需要在對應的文件中創建ImageLoader對象(看下文)。

使用示例:

1、載入文件:

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

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

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

2、創建ImageLoader對象。

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

參數

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

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

loading : function 圖片加載中的回調方法 非必填 示例:

loaded : funciton 圖片記載完成后的回調 非必填 示例:

加載器(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 字段必填 根據自我需要填寫。

其他圖片資源支持:

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

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

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

"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、直接以數組方式把圖片堆放在一個數組里,如:

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

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

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

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

創建ImageLoader對象時source字段的說明:

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

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

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

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

source: [ImageSource]

也可以根據項目需要只加載其中一部分資源,如:

source: [ImageSource.imageList, ImageSource.single2]

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

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

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

頁面上的Image會立即顯示,不需要重新發起加載圖片請求。

相關推薦:

JS實現圖片預加載無需等待

又一個小巧的圖片預加載類_圖象特效

以上就是小程序加載器的實現:按需預加載遠程圖片資源的詳細內容,更多請關注php中文網其它相關文章!


小程序是一種不需要下載安裝即可使用的應用,它實現了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 日韩福利视频在线| 国产精品无码人妻一区二区在线| 色黄视频免费看| 日本福利视频在线| 超碰91在线播放| 手机在线看福利| 欧洲av无码放荡人妇网站| 精品国产一区二区三区在线| 日av中文字幕| 国产综合av在线| 国产一区二区三区乱码| 日本免费在线视频观看| 午夜宅男在线视频| 91香蕉视频污版| 精品www久久久久奶水| 国产不卡一区二区视频| 97超碰免费观看| 色黄视频免费看| 日韩欧美国产片| 久热精品在线播放| 亚洲 激情 在线| 少妇一级淫免费放| 在线免费av播放| 久热在线视频观看| 蜜臀一区二区三区精品免费视频| 妓院一钑片免看黄大片| 99久久激情视频| 激情内射人妻1区2区3区| 欧美在线观看成人| 91在线视频观看免费| 五月婷婷深爱五月| 拔插拔插华人永久免费| 欧美丝袜在线观看| 美女黄色片网站| 中文字幕日韩精品无码内射| 久久久成人精品一区二区三区| 一区二区三区四区久久| 97中文字幕在线| 日本欧美视频在线观看| 国产黄色一级网站| 精品999在线| www.成年人| 少妇大叫太大太粗太爽了a片小说| av动漫在线免费观看| 免费网站在线观看视频| 亚洲爆乳无码专区| 日本精品一区在线| 国产欧美日韩网站| 国产精品拍拍拍| 国产欧美123| 国产xxxxx视频| 亚洲国产午夜精品| 日本www在线视频| 亚洲欧美自拍另类日韩| 亚洲第一综合网站| 欧美aⅴ在线观看| 国产又粗又爽又黄的视频| 久久手机在线视频| 亚洲36d大奶网| www..com日韩| 天堂网成人在线| 欧美日韩在线免费播放| 国产成人亚洲综合无码| 18岁视频在线观看| 国产a级黄色大片| www.精品在线| 欧美 日韩 国产在线观看| www.久久com| 一区二区成人网| 国产午夜福利在线播放| 男女激烈动态图| 日本高清一区二区视频| 国产精品无码一本二本三本色| 色撸撸在线观看| 91福利免费观看| 欧美三级理论片| 日韩中文字幕三区| 国产不卡一区二区视频| 国产美女视频免费| 黄色片免费网址| www.久久久精品| 婷婷六月天在线| 激情视频综合网| 欧美 国产 综合| 亚洲 自拍 另类小说综合图区| 亚洲国产精品女人| 久久精品久久99| 涩涩网站在线看| 福利片一区二区三区| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 北条麻妃在线视频| 久在线观看视频| 国产va亚洲va在线va| 老太脱裤让老头玩ⅹxxxx| 日本免费成人网| 福利视频免费在线观看| 激情五月婷婷六月| 真人抽搐一进一出视频| 岛国大片在线播放| 欧美日韩精品在线一区二区 | 亚洲区成人777777精品| 在线视频日韩欧美| 性生活免费观看视频| 视色,视色影院,视色影库,视色网| 日本一二三四区视频| 日韩不卡视频一区二区| av在线免费观看国产| 97视频久久久| 乱妇乱女熟妇熟女网站| 国产嫩草在线观看| 在线视频观看一区二区| 青青视频免费在线观看| 婷婷五月综合缴情在线视频| 北条麻妃在线视频观看| 日韩一区二区三区不卡视频| 日本77777| 分分操这里只有精品| 999精品网站| 亚洲天堂伊人网| 日韩专区第三页| 波多野结衣作品集| 超碰免费在线公开| 国产欧美在线一区| 色姑娘综合天天| 成人在线观看你懂的| 国产野外作爱视频播放| 无码毛片aaa在线| 日日碰狠狠丁香久燥| 黄色高清视频网站| 99精品视频在线看| 黄色免费高清视频| 国产一级不卡毛片| 91网站在线观看免费| 午夜视频你懂的| 成人黄色大片网站| 国产精品v日韩精品v在线观看| 97碰在线视频| 五月天色婷婷综合| 狠狠操精品视频| 人妻少妇精品久久| 最新中文字幕久久| 亚洲色图久久久| 欧美国产激情视频| 青青在线视频免费观看| 爱豆国产剧免费观看大全剧苏畅| 欧美成人三级在线视频| 激情久久综合网| mm131国产精品| 黄色一级视频片| www插插插无码免费视频网站| 91亚洲免费视频| 欧美精品第三页| 日本精品免费在线观看| 成人在线国产视频| 四虎精品欧美一区二区免费| 91福利国产成人精品播放| 99蜜桃臀久久久欧美精品网站| 国产a级黄色大片| 影音先锋男人的网站| 午夜视频在线网站| 久久午夜夜伦鲁鲁一区二区| 每日在线更新av| av天堂永久资源网| 国产午夜福利视频在线观看| 毛片在线视频播放| 欧美日韩精品在线一区二区| 丁香婷婷综合激情| 人妻av中文系列| 国产精品国产亚洲精品看不卡| www.久久com| 欧美少妇在线观看| 欧美高清中文字幕| 日韩精品―中文字幕| 免费在线观看亚洲视频| 国产男女无遮挡| 中国黄色片免费看| 成年人网站av| 日本大胆人体视频| 免费在线观看视频a| av7777777| 亚洲天堂av线| 婷婷中文字幕在线观看| 69精品丰满人妻无码视频a片| 黄色片免费在线观看视频| 成人网站免费观看入口| 人妻无码视频一区二区三区| 日本在线播放一区二区| 六月婷婷激情网| www.com毛片| 亚洲 国产 图片| 99热久久这里只有精品| 成人一区二区三| 天天综合五月天| 久久久免费视频网站| 亚洲第一区第二区第三区| 性一交一乱一伧国产女士spa| 国产亚洲欧美在线视频| 五月六月丁香婷婷| 日韩欧美精品在线观看视频| 99精品999|