濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 淺談移動(dòng)端網(wǎng)頁(yè)圖片預(yù)加載方案

淺談移動(dòng)端網(wǎng)頁(yè)圖片預(yù)加載方案

熱門標(biāo)簽:惡搞電話機(jī)器人 如何查看地圖標(biāo)注 黃石ai電銷機(jī)器人呼叫中心 欣鼎電銷機(jī)器人 效果 高德地圖標(biāo)注商戶怎么標(biāo) 智能電銷機(jī)器人被禁用了么 地圖標(biāo)注軟件打印出來(lái) ok電銷機(jī)器人 電話機(jī)器人技術(shù)

由于公司業(yè)務(wù)需要,vue制作的網(wǎng)頁(yè)需要連接智能家居的wifi,然而這種wifi是沒(méi)有連接互聯(lián)網(wǎng)的,僅用于手機(jī)與家居的對(duì)接。這樣,就導(dǎo)致了網(wǎng)頁(yè)在這種wifi下無(wú)法加載服務(wù)器上的圖片。

就此,針對(duì)vue單頁(yè)面系統(tǒng),我想出來(lái)3種方案。

1.在上一頁(yè)先加載圖片,緩存起來(lái),后面的斷網(wǎng)頁(yè)面就能拿到了。

2.做一個(gè)頁(yè)面,上方是路由容器,放置斷網(wǎng)后的頁(yè)面,下方是需要顯示的全部圖片。這樣頁(yè)面加載時(shí),圖片就全部出來(lái)了,上方的子路由自然能拿到圖片。

3.把圖片轉(zhuǎn)換成base64數(shù)據(jù)保存在localStorage。

第1、2種方案比較簡(jiǎn)單,在pc上和安卓平臺(tái)上表現(xiàn)良好。然而在ios上卻不顯示。

(明明圖片都在下方了,上面的卻死活不顯示)

由此推測(cè),ios系統(tǒng)類瀏覽器對(duì)圖片的加載是一個(gè)蘿卜一個(gè)坑的。加載每個(gè)圖片前會(huì)先嗅探其是否在服務(wù)器上,存在且未改變就是用緩存顯示,沒(méi)找到就直接404了。因此基于瀏覽器的緩存策略在斷網(wǎng)的情況下并不理想。,需要使用第三種方案。先貼上代碼:

  /*  獲取圖片的base64碼
        * @param {obj}img圖片dom對(duì)象
         * */
        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可以很容易實(shí)現(xiàn)把圖片轉(zhuǎn)換成base64格式。之后只要保存在sessionStorage里面就可以了。之后重新顯示圖片時(shí),只要設(shè)置img的src屬性為base64數(shù)據(jù)就可以了。我在vue項(xiàng)目里面的做法是,創(chuàng)建一個(gè)用于轉(zhuǎn)換和保存base64的組件,把slot里面的圖片全部轉(zhuǎn)換成base64,并為img標(biāo)簽創(chuàng)建name屬性并作為sessionStorage的key;再創(chuàng)建一個(gè)組件作為顯示組件(只包含一個(gè)img標(biāo)簽),設(shè)置其name屬性和其對(duì)應(yīng)的圖片的一樣,作為key來(lái)取出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,大家可以放心使用。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

標(biāo)簽:赤峰 阿壩 金昌 聊城 萍鄉(xiāng) 中山 綏化 盤(pán)錦

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《淺談移動(dòng)端網(wǎng)頁(yè)圖片預(yù)加載方案》,本文關(guān)鍵詞  淺談,移動(dòng),端,網(wǎng)頁(yè),圖片,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《淺談移動(dòng)端網(wǎng)頁(yè)圖片預(yù)加載方案》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于淺談移動(dòng)端網(wǎng)頁(yè)圖片預(yù)加載方案的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    临漳县| 佳木斯市| 新和县| 黄浦区| 富川| 隆林| 普陀区| 五家渠市| 商河县| 霍州市| 海原县| 浙江省| 宝坻区| 陆丰市| 华坪县| 方正县| 平昌县| 同德县| 宜兴市| 喜德县| 寿宁县| 湘乡市| 龙胜| 会理县| 新乡县| 信丰县| 定结县| 芦山县| 彩票| 吉隆县| 武汉市| 稷山县| 文化| 东源县| 云浮市| 屯留县| 台江县| 宁蒗| 金坛市| 六安市| 黔江区|