判斷瀏覽器是否支持WebP圖片

本文原文來(lái)源于自家個(gè)人博客站 捷搜索 >> 判斷瀏覽器是否支持WebP圖片,

上篇文章“什么是WebP圖片?”對(duì)WebP圖片進(jìn)行了詳細(xì)的介紹,并介紹其相對(duì)于其他圖片格式的優(yōu)勢(shì)以及它的兼容性問(wèn)題,那么,本文為大家講述下如何考慮兼容性的情況下使用WebP圖片。

解決原理

我們需要使用WebP格式的圖準(zhǔn)備兩種格式的圖片,一種是原圖原格式,另一種是WebP圖片。然后我們通過(guò)判斷瀏覽器是否支持WebP,如果支持就顯示WebP圖,如果不支持就顯示原圖。這樣我們就可以很妥善地解決WebP圖的兼容性問(wèn)題,最大限度地做到圖片最優(yōu)化。一來(lái),不會(huì)因?yàn)槲抑环臰ebP圖,從而影響不支持WebP的瀏覽器用戶,這樣比圖片加載慢更可怕;二來(lái),也不會(huì)WebP的兼容性問(wèn)題而放棄使用WebP,這樣也就體驗(yàn)不到WebP給我們帶來(lái)的好處??傊〉胶锰幍厥褂肳ebP。

v2-c87bbe995a33807d176f5d0b217146a4_hd.jpg

代碼實(shí)現(xiàn)

1.寬高判斷法

先加載一個(gè)WebP圖片,如果能獲取到圖片的寬度和高度,就說(shuō)明是支持WebP的,反之則不支持。

var isWebP = false;
var img = new Image();
img.onload = function(){
    isWebP = !!(img.height>0 && img.width>0);
    checkPic(isWebP);
};
img.onerror = function(){
    isWebP = false;
    checkPic(isWebP);
};
img.src = './c.webp';
var checkPic = function(isWebP){
    $("#pics img").each(function(i,v){
        var src = isWebP?$(v).attr('webppic-src'):$(v).attr('pic-src');
        $(v).attr('src',src);
    })
}

2.請(qǐng)求頭相關(guān)字段

通過(guò) Chrome 瀏覽器開(kāi)發(fā)者工具抓包顯示,可以通過(guò)查看響應(yīng)頭和請(qǐng)求頭相關(guān)字段,判斷其Accept里是否含有 image/webp 字段,如果包含則說(shuō)明支持WebP,反之則不支持。

1536290516139014.jpg
var checkWebp = function(){
    try{
        return (document.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') == 0);
    }catch(err) {
        return  false;
    }
}
isWebP = checkWebP() //isWebP為true則支持WebP,若為false則不支持WebP

總結(jié):整體代碼

代碼里把兩種方法都寫進(jìn)去了,實(shí)際使用的時(shí)候,選擇其中一種使用就行了,把另外一個(gè)方法代碼去掉,切勿同時(shí)使用,以免出錯(cuò)。

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<div id="pics">
    <img src="" pic-src="./c.jpg" webppic-src="./c.webp">
    <img src="" pic-src="./c.jpg" webppic-src="./c.webp">
    <img src="" pic-src="./c.jpg" webppic-src="./c.webp">
</div>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
// 公共方法,操作放原圖還是放WebP圖
var checkPic = function(isWebP){
    $("#pics img").each(function(i,v){
        var src = isWebP?$(v).attr('webppic-src'):$(v).attr('pic-src');
        $(v).attr('src',src);
    })
}
// 第一種方法
var isWebP = false;
var img = new Image();
img.onload = function(){
    isWebP = !!(img.height>0 && img.width>0);
    checkPic(isWebP);
};
img.onerror = function(){
    isWebP = false;
    checkPic(isWebP);
};
img.src = './c.webp';
// 第二種方法
var checkWebp = function(){
    try{
        return (document.createElement('canvas').toDataURL('image/webp').indexOf('data:image/webp') == 0);
    }catch(err) {
        return  false;
    }
}
checkPic(checkWebp());
</script>
</body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明AI閱讀 16,213評(píng)論 3 119
  • 我也不知道什么時(shí)候進(jìn)入正文QAQ 仍然是日常。 看書,閑聊,一日三餐與性愛(ài),偶爾在某個(gè)周末的傍晚牽著手一起去看小區(qū)...
    再找找嘻嘻閱讀 373評(píng)論 0 3
  • 在寒冬早上六點(diǎn)二十分左右的輕軌站入口,是較難看見(jiàn)十幾歲左右的青少年的。 ——除非是趕早班車上學(xué)的辛苦學(xué)子(雖然大概...
    Valkoinen閱讀 181評(píng)論 0 1
  • 如果你的生命只剩下十年,你還會(huì)結(jié)婚生子嗎?姑且把這個(gè)當(dāng)做論題,會(huì)與不會(huì),你會(huì)選擇哪個(gè)論點(diǎn)? 如果我的生命只剩下十年...
    陳左閱讀 1,460評(píng)論 0 0
  • 今天這一天過(guò)得真是很充實(shí),特別是晚上的時(shí)候。前幾天我宿舍的學(xué)生在宿舍內(nèi)說(shuō)話,打鬧,嚴(yán)重違反紀(jì)律,我原本打算給他們班...
    楚教官閱讀 4,239評(píng)論 0 3

友情鏈接更多精彩內(nèi)容