欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

圖像替換新技術(shù) 狀態(tài)域方法

 更新時(shí)間:2010年01月28日 22:44:39   作者:  
熟悉css的開發(fā)者一定知道圖像替換技術(shù),也深知它的意義,Dave Shea 曾在他的一篇文章對(duì)此做了詳細(xì)的總結(jié)
參看Dave Shea's excellent summary ,Paul Young 在分析現(xiàn)存的所有方法的優(yōu)缺點(diǎn)之后,提出了一種新的方法,并將其命名為“狀態(tài)域方法”(The StateMethod),本文將詳細(xì)介紹該方法的原理:

該方法檢查圖片是否禁用,并不是請(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ò)誤提示,但頁(yè)面 布局不受任何影響。如果用戶的狀態(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)讓用戶在文本和替代圖像之間切換。

查看示例(示例文件由Paul Young提供)

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)文章

  • 基于Javascript實(shí)現(xiàn)彈出頁(yè)面效果

    基于Javascript實(shí)現(xiàn)彈出頁(yè)面效果

    彈出層效果是一個(gè)很實(shí)用的功能,很多網(wǎng)站都采用了這種方式實(shí)現(xiàn)登錄和注冊(cè),下面小編通過本文給大家分享具體實(shí)現(xiàn)代碼,對(duì)js彈出頁(yè)面效果相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • JavaScript指定字段排序方法sortFun函數(shù)

    JavaScript指定字段排序方法sortFun函數(shù)

    這篇文章主要介紹了JavaScript指定字段排序方法sortFun函數(shù),數(shù)組的排序方法是sort,但是它并不支持根據(jù)指定的字段進(jìn)行排序,而sortFun可以根據(jù)指定的字段進(jìn)行排序,需要的朋友可以參考下
    2023-05-05
  • JavaScript檢測(cè)彈出窗口是否已經(jīng)關(guān)閉的方法

    JavaScript檢測(cè)彈出窗口是否已經(jīng)關(guān)閉的方法

    這篇文章主要介紹了JavaScript檢測(cè)彈出窗口是否已經(jīng)關(guān)閉的方法,涉及javascript中window屬性的closed屬性的使用技巧,需要的朋友可以參考下
    2015-03-03
  • 微信小程序?qū)崿F(xiàn)圖片預(yù)覽功能

    微信小程序?qū)崿F(xiàn)圖片預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)圖片預(yù)覽功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 詳解JavaScript基于面向?qū)ο笾^承

    詳解JavaScript基于面向?qū)ο笾^承

    這篇文章主要介紹了JavaScript基于面向?qū)ο笾^承,感興趣的小伙伴們可以參考一下
    2015-12-12
  • JS實(shí)現(xiàn)動(dòng)態(tài)添加DOM節(jié)點(diǎn)和事件的方法示例

    JS實(shí)現(xiàn)動(dòng)態(tài)添加DOM節(jié)點(diǎn)和事件的方法示例

    這篇文章主要介紹了JS實(shí)現(xiàn)動(dòng)態(tài)添加DOM節(jié)點(diǎn)和事件的方法,涉及javascript事件響應(yīng)及針對(duì)頁(yè)面dom元素節(jié)點(diǎn)與屬性的動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-04-04
  • JavaScript實(shí)現(xiàn)列表分頁(yè)功能特效

    JavaScript實(shí)現(xiàn)列表分頁(yè)功能特效

    最近在做一個(gè)小項(xiàng)目,有時(shí)需要制作靜態(tài)頁(yè)面網(wǎng)站,而一旦涉及到文章的分頁(yè),實(shí)現(xiàn)起來非常麻煩,自己又剛?cè)腴T,對(duì)js不是很熟悉,所以就拿來練練手。
    2015-05-05
  • JS獲取頁(yè)面窗口大小的代碼解讀

    JS獲取頁(yè)面窗口大小的代碼解讀

    本節(jié)實(shí)例給出一個(gè)獲取瀏覽器當(dāng)前窗口大小的方法。當(dāng)瀏覽器窗口大小變化時(shí),顯示的值會(huì)隨時(shí)變化
    2011-12-12
  • JavaScript中使用Callback控制流程介紹

    JavaScript中使用Callback控制流程介紹

    這篇文章主要介紹了JavaScript中使用Callback控制流程介紹,本文講解了callback的一些問題和優(yōu)化后的寫法并給出代碼實(shí)例,需要的朋友可以參考下
    2015-03-03
  • 詳解JavaScript原始數(shù)據(jù)類型Symbol

    詳解JavaScript原始數(shù)據(jù)類型Symbol

    以前提到 JavaScript 原始數(shù)據(jù)類型時(shí),我們知道有Number,String,Null,Boolean,Undefined這幾種。ES6 引入了新的基本數(shù)據(jù)類型Symbol和BigInt。今天我們就來了解下Symbol類型。Symbol類型是為了解決屬性名沖突的問題,順帶還具備模擬私有屬性的功能。
    2021-05-05

最新評(píng)論