Vuejs webp圖片支持屈尼,插件開發(fā)過程~

本人已經使用vue.js半年多了,在做一些Html5頁面的時候發(fā)現(xiàn)很多頁面都是圖片組成的褐着,如果能有效的壓縮圖片的體積那么整個項目體積就會減少很多,這是為什么寫這個簡單東西的起點托呕。

Webp 百度百科上已經講清楚在保持原畫質的情況呀體積可以壓縮到原來的60%這是很牛逼的一件事含蓉∑盗玻看看webp的兼容情況,下圖是caniuse上面最新的webp支持情況

webp兼容情況

兼容情況還是不那么樂觀馅扣,不過chrome和安卓陣營已經全部支持斟赚。所以我還是做了這件事。

源碼github

Vue.js 的自定義指令系統(tǒng)十分強大是我做這件事的根本原因之一差油,所以我的設想是在一個指令中傳入圖片鏈接拗军,然后在頁面渲染的時候根據(jù)瀏覽器是否支持webp格式的圖片選擇下載那個圖片,這里就需要判斷瀏覽器是否支持webp了,這里我用到的是canvas方法,代碼如下

var canUseWebp = (function() {
  var elem = document.createElement('canvas');
  if (!!(elem.getContext && elem.getContext('2d'))) {
    return elem.toDataURL('image/webp').indexOf('data:image/webp') === 0;
  } else {
    return false;
  }
})();

這時候就非常簡單了指令在update的時候根據(jù)是否支持然后選擇不同的圖片


function update(el, option) {
    var attr = option.arg || 'src';
    if (el.tagName.toLowerCase() === 'img' && option.value) {
        el.setAttribute(attr, option.value);
    }
  };

然而事情的這個時候發(fā)現(xiàn)一些小的圖標不見了拐格,原來我的webpack配置中設置了小于10k的圖片使用base64編碼,
所以最終我的更新代碼是這樣的

 function update(el, option) {
    var attr = option.arg || 'src';
    if (el.tagName.toLowerCase() === 'img' && option.value) {
      if (option.value.indexOf('data:image') < 0) {
        var tmp = option.value.substring(0, option.value.lastIndexOf('.')) + '.webp';
        el.setAttribute(attr, canUseWebp ? tmp : option.value);
      } else {
        el.setAttribute(attr, option.value);
      }

    }
  };

這個時候vue.js 2.0發(fā)布了膨蛮。我有針對 2.0版本做了支持,由于我的指令非常簡單,所以代碼很輕松

var isVueNext = Vue.version.split('.')[0] === '2';
  if (isVueNext) {
    Vue.directive('webp', function(el, binding) {
      update(el, {
        arg: binding.arg,
        value: binding.value
      });
    })
  } else {
    Vue.directive('webp', {
      bind: function() {},
      update: function(val, old) {
        update(this.el, {
          arg: this.arg,
          value: val
        });
      },
      unbind: function() {}
    })
  }
};

這樣我的vue-webp指令就算完成了。
只有指令可不行铲汪,每次都要自己生成一份webp格式的圖片,這太不友好了罐柳。我有查找一番,發(fā)現(xiàn)一個webp-loader可以在webpack打包和dev的時候自動生成相應的webp文件狰住,太好了张吉。使用原作者的webp-loader發(fā)現(xiàn)文件的hash不一樣,我又用imagemin最新版本升級了一下催植,上傳到npmwebpn-loader(原諒我不會命名)肮蛹,
具體使用方法可以參考我的 Vue.js 2.0 后臺項目 模板項目

謝謝大家,看到這里创南。歡迎各種star

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末伦忠,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子稿辙,更是在濱河造成了極大的恐慌昆码,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邻储,死亡現(xiàn)場離奇詭異赋咽,居然都是意外死亡,警方通過查閱死者的電腦和手機吨娜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門脓匿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宦赠,你說我怎么就攤上這事陪毡∶啄福” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵毡琉,是天一觀的道長铁瞒。 經常有香客問我,道長绊起,這世上最難降的妖魔是什么精拟? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮虱歪,結果婚禮上蜂绎,老公的妹妹穿的比我還像新娘。我一直安慰自己笋鄙,他們只是感情好师枣,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萧落,像睡著了一般践美。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上找岖,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天陨倡,我揣著相機與錄音,去河邊找鬼许布。 笑死兴革,一個胖子當著我的面吹牛,可吹牛的內容都是我干的蜜唾。 我是一名探鬼主播杂曲,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼袁余!你這毒婦竟也來了擎勘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤颖榜,失蹤者是張志新(化名)和其女友劉穎棚饵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朱转,經...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蟹地,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了藤为。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怪与。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缅疟,靈堂內的尸體忽然破棺而出分别,到底是詐尸還是另有隱情遍愿,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布耘斩,位于F島的核電站沼填,受9級特大地震影響,放射性物質發(fā)生泄漏括授。R本人自食惡果不足惜坞笙,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荚虚。 院中可真熱鬧薛夜,春花似錦、人聲如沸版述。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渴析。三九已至晚伙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俭茧,已是汗流浹背咆疗。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留母债,地道東北人民傻。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像场斑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牵署,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內容

  • 轉載 :OpenDiggawesome-github-vue 是由OpenDigg整理并維護的Vue相關開源項目庫...
    果汁密碼閱讀 23,107評論 8 124
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺漏隐,特此分享以備自己日后查看,也希望更多的人看到...
    小小字符閱讀 8,147評論 7 35
  • 今天在知乎上受邀了這樣一個問題:老公和好朋友出軌了,雖然真的不想再提好朋友三個字取具,可這確實是事實脖隶。一直都是沒有心眼...
    當下的幸福空間閱讀 492評論 0 1
  • 01 周末,與小兵同學窩在家里块仆。從超市回來构蹬,看了看昨天被小兵同學弄亂的家里王暗,電腦、平板庄敛、還有各種線俗壹,散落在二十平米...
    書蟲小言閱讀 353評論 2 1
  • “其實我也不懂,我現(xiàn)在根本不想談感情藻烤,你說我喜歡漂亮的嗎绷雏,嗯,也喜歡怖亭,你說我喜歡長相一般的嗎……” 當然也喜歡涎显,喜...
    molumoai閱讀 338評論 2 3