圖像替換新技術(shù) 狀態(tài)域方法
該方法檢查圖片是否禁用,并不是請(qǐng)求服務(wù)器上的圖片,因?yàn)槟菢訒?huì)導(dǎo)致一次額外的http請(qǐng)求。作者創(chuàng)建了一個(gè)巧妙的方法。
在大多數(shù)瀏覽器中,Image對(duì)象可以實(shí)例化并追溯到一個(gè)無效的URL(http://0),這樣很容易檢測(cè)Image的狀態(tài)。如果禁用,onerror事件將觸發(fā),在js文件的開頭,j建立一個(gè)新的圖像對(duì)象:
var img = new Image();
但是,有兩個(gè)古怪的瀏覽器對(duì)此方法并不兼容。在Gecko瀏覽器中,不論Image是否被禁用。Onerror事件總是 被觸發(fā)。所幸的是,另外一種可行的方案可以解決此問題--給html元素附加一個(gè)無效的背景圖片,然后通過getComputedStyle方法獲得 style屬性。如果Image禁用,其屬性為none或url(invalid-url:):
if (img.style.MozBinding != null)
{
img.style.backgroundImage = "url(" +document.location.protocol + "http://0)";
var bg = window.getComputedStyle(img,'').backgroundImage;
if (bg != "none" && bg !="url(invalid-url:)" || document.URL.substr(0, 2) == "fi")
{
document.enableStateScope("images-on", true);
}
}
另外一個(gè)富有挑戰(zhàn)性的瀏覽器是safari,如果請(qǐng)求是一個(gè)無效的URL,safari的狀態(tài)欄將出現(xiàn)錯(cuò)誤提示,但頁面 布局不受任何影響。如果用戶的狀態(tài)欄處于開啟狀態(tài),報(bào)錯(cuò)將一直持續(xù),這很不專業(yè),同樣,作者研究了另外一種可行的方案。如果Image來自于1*1的 gif圖像,且被數(shù)據(jù)編碼。如果Image禁用,其寬度將為0,以下為在safari中測(cè)試的情況:
else
{
img.style.cssText ="-webkit-opacity:0";
if (img.style.webkitOpacity == 0)
{
img.onload = function()
{
document.enableStateScope("images-on", img.width > 0);
}
img.src =
"data:image/gif;base64," +
"R0lGODlhAQABAIAAAP///wAAACH5BAE" +
"AAAAALAAAAAABAAEAAAICRAEAOw==";
}
}
最后,對(duì)于其它瀏覽器,在開始初始化Image對(duì)象時(shí),僅僅需要測(cè)試onerror觸發(fā)事件。
else { img.onerror = function(e) { document.enableStateScope("images-on", true); } img.src = "about:blank"; }
狀態(tài)域是可以切換的
可以創(chuàng)建一個(gè)系統(tǒng)讓用戶在文本和替代圖像之間切換。
class屬性添加到html之上而不是body或其它子元素之上,主要原因在于在圖像替換之前,body需要全面加載。如果“image-on”不添加到html之上。當(dāng)狀態(tài)域啟用時(shí),將會(huì)出現(xiàn)閃動(dòng)。
圖像替換技術(shù)是css中相當(dāng)重要的一部分。鑒于現(xiàn)存圖像替換技術(shù)的缺點(diǎn),作者花大量時(shí)間另辟蹊徑,方法獨(dú)到,值得借鑒。
示例下載:tate-scope-image-replacement.zip
翻譯原文:http://www.denisdeng.com/?p=235
英文原文:http://www.sitepoint.com/article/image-replacement-state-scope/
相關(guān)文章
JS實(shí)現(xiàn)三個(gè)層重疊點(diǎn)擊互相切換的方法
這篇文章主要介紹了JS實(shí)現(xiàn)三個(gè)層重疊點(diǎn)擊互相切換的方法,涉及JavaScript動(dòng)態(tài)操作頁面定位屬性的相關(guān)技巧,需要的朋友可以參考下2015-10-10
Javascript 5種方法實(shí)現(xiàn)過濾刪除前后所有空格
這篇文章主要介紹Javascript 5種過濾刪除前后所有空格的方法,比較實(shí)用,需要的朋友可以參考下。2016-06-06
JavaScript中的二進(jìn)制數(shù)據(jù)處理方法詳解
Blob、ArrayBuffer和Buffer是JavaScript中用于表示和操作二進(jìn)制數(shù)據(jù)的三種主要方式,本文將深入探討這些概念,以及它們?nèi)绾卧贘avaScript中使用,需要的可以參考一下2023-06-06
微信小程使用swiper組件實(shí)現(xiàn)圖片輪播切換顯示功能【附源碼下載】
這篇文章主要介紹了微信小程使用swiper組件實(shí)現(xiàn)圖片輪播切換顯示功能,涉及swiper組件相關(guān)屬性使用技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2017-12-12
關(guān)于前后端json數(shù)據(jù)的發(fā)送與接收詳解
這篇文章主要給大家介紹了關(guān)于前后端json數(shù)據(jù)發(fā)送與接收的相關(guān)資料,文中通過示例代碼詳細(xì)介紹了關(guān)于flask中的json數(shù)據(jù)接收和前端發(fā)送json數(shù)據(jù)等內(nèi)容,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07
JS實(shí)現(xiàn)快速的導(dǎo)航下拉菜單動(dòng)畫效果附源碼下載
本文給大家分享一個(gè)帶有變形動(dòng)畫特效的下拉導(dǎo)航菜單特效,該導(dǎo)航菜單在菜單項(xiàng)之間切換時(shí),下拉菜單會(huì)快速的根據(jù)菜單內(nèi)容的大小來動(dòng)態(tài)變形,顯示合適的下拉菜單大小,效果非常棒。對(duì)導(dǎo)航下拉菜單代碼感興趣的朋友可以參考下本文2016-11-11
對(duì)采用動(dòng)態(tài)原型方式無法展示繼承機(jī)制得思考
今天看書,作者討論到能否采用動(dòng)態(tài)原型方法展示繼承機(jī)制,給出的答案是:不能。原因是prototype對(duì)象的唯一性。看下面代碼(這段代碼不正確,卻值得研究)2009-12-12

