今天我們就來分享有關(guān)于:“html5移動網(wǎng)頁圖片加載方案分享! ”這個內(nèi)容,下面是小編整理的相關(guān)內(nèi)容分享!
由于公司業(yè)務(wù)需要,vue制作的網(wǎng)頁需要連接智能家居的wifi,然而這種wifi是沒有連接互聯(lián)網(wǎng)的,僅用于手機(jī)與家居的對接。這樣,就導(dǎo)致了網(wǎng)頁在這種wifi下無法加載服務(wù)器上的圖片。
就此,針對vue單頁面系統(tǒng),我想出來3種方案。
1.在上一頁先加載圖片,緩存起來,后面的斷網(wǎng)頁面就能拿到了。
2.做一個頁面,上方是路由容器,放置斷網(wǎng)后的頁面,下方是需要顯示的全部圖片。這樣頁面加載時,圖片就全部出來了,上方的子路由自然能拿到圖片。
3.把圖片轉(zhuǎn)換成base64數(shù)據(jù)保存在localStorage。
第1、2種方案比較簡單,在pc上和安卓平臺上表現(xiàn)良好。然而在ios上卻不顯示。
(明明圖片都在下方了,上面的卻死活不顯示)
由此推測,ios系統(tǒng)類瀏覽器對圖片的加載是一個蘿卜一個坑的。加載每個圖片前會先嗅探其是否在服務(wù)器上,存在且未改變就是用緩存顯示,沒找到就直接404了。因此基于瀏覽器的緩存策略在斷網(wǎng)的情況下并不理想。,需要使用第三種方案。先貼上代碼:
/* 獲取圖片的base64碼
* @param {obj}img圖片dom對象
* */
function getBase64Image(img) {
let canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
let ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height); //繪制相同圖片
return canvas.toDataURL("image/png"); //轉(zhuǎn)換成base64數(shù)據(jù)
}
利用canvas可以很容易實現(xiàn)把圖片轉(zhuǎn)換成base64格式。之后只要保存在sessionStorage里面就可以了。之后重新顯示圖片時,只要設(shè)置img的src屬性為base64數(shù)據(jù)就可以了。我在vue項目里面的做法是,創(chuàng)建一個用于轉(zhuǎn)換和保存base64的組件,把slot里面的圖片全部轉(zhuǎn)換成base64,并為img標(biāo)簽創(chuàng)建name屬性并作為sessionStorage的key;再創(chuàng)建一個組件作為顯示組件(只包含一個img標(biāo)簽),設(shè)置其name屬性和其對應(yīng)的圖片的一樣,作為key來取出sessionStorage的base64數(shù)據(jù)就ok了。
轉(zhuǎn)換和保存組件:
<!--需要預(yù)加載的圖片-->
<save-img-base64>
<img src="../../assets/img/connect/bind_xiaofang.png" name="bind_xiaofang"/>
<img src="../../assets/img/connect/bind_allonePro.png" name="bind_allonePro"/>
<img src="../../assets/img/connect/bind_S20.png" name="bind_S20"/>
<img src="../../assets/img/connect/bind_S30.png" name="bind_S30"/>
<img src="../../assets/img/connect/connectStart_xiaofang.png" name="connectStart_xiaofang"/>
<img src="../../assets/img/connect/connectStart_allonePro.png" name="connectStart_allonePro"/>
<img src="../../assets/img/connect/connectStart_S20.png" name="connectStart_S20"/>
<img src="../../assets/img/connect/connectStart_S30.png" name="connectStart_S30"/>
<img src="../../assets/img/connect/reset_xiaofang.png" name="reset_xiaofang"/>
<img src="../../assets/img/connect/reset_allonePro.png" name="reset_allonePro"/>
<img src="../../assets/img/connect/reset_S20.png" name="reset_S20"/>
<img src="../../assets/img/connect/reset_S30.png" name="reset_S30"/>
<img src="../../assets/img/connect/network_set.png" name="network_set"/>
<img src="../../assets/img/connect/phone_wifi.png" name="phone_wifi"/>
<img src="../../assets/img/connect/tmall.png" name="tmall"/>
</save-img-base64>
顯示組件:
<img-base64 name="network_set"></img-base64>
瀏覽器sessionStorage情況:
從Can I use的表格中可以看出,現(xiàn)代手機(jī)瀏覽器基本兼容canvas,大家可以放心使用。
從文章中相信很多小伙伴們都知道了對于:“html5移動網(wǎng)頁圖片加載方案分享! ”這個話題的相關(guān)內(nèi)容和用法,有喜歡html5的小伙伴們可以在W3Cschool中進(jìn)行學(xué)習(xí)和了解!