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

ie和firefox中img對(duì)象區(qū)別的困惑

 更新時(shí)間:2006年12月27日 00:00:00   作者:  

在調(diào)試js時(shí)遇到一些惡心的問題,于是做了一個(gè)測(cè)試程序,放到網(wǎng)上讓大家?guī)臀覝y(cè)試。帖子見http://vchelp.net/cndevforum/subject_view.asp?page=-1&subject_id=165791

下面我給出關(guān)于測(cè)試的解釋:

起因源于我想做這么一個(gè)網(wǎng)頁:用戶上傳一個(gè)圖片后,如果圖片大于500象素,則在客戶端把圖片縮小成500象素大小。但是不想讓用戶看到這個(gè)大小調(diào)整過程。于是想首先隱藏這個(gè)圖片,在整個(gè)網(wǎng)頁下載完成后,調(diào)整大小,然后再顯示調(diào)整好的圖像。

于是我首先設(shè)置img標(biāo)簽的style="display:none",然后在window.onload中獲取原圖大小,進(jìn)行調(diào)整。
<img src="http:......" style="display:none" id="c010_jpg">

結(jié)果發(fā)現(xiàn)firefox下,一個(gè)disolay=none的圖像width和height是原圖的實(shí)際大小,但是ie下卻都是0

于是想到穩(wěn)妥的辦法是建立一個(gè)image對(duì)象,然后對(duì)src賦值,進(jìn)而讀取原圖大小的信息:
var oImg = new Image();
oImg.src = docunent.getElementById("c010_jpg").src;
//馬上讀取oImg的width和height
alert([oImg.width, oImg.height]);

結(jié)果在ie測(cè)試發(fā)現(xiàn),上面的代碼會(huì)輸出“0,0”
我懷疑這說明當(dāng)ie解析一個(gè)display:none的img標(biāo)簽時(shí),并沒有下載這個(gè)圖片,所以上面的代碼對(duì)oImg.src賦值后ie需要從目標(biāo)地址下載這個(gè)圖片,當(dāng)然,這個(gè)過程是異步的過程
而在firefox下,上面的代碼會(huì)輸出正確的信息,這說明firefox解析display:none的圖片時(shí),已經(jīng)下載了這個(gè)圖片。以后再對(duì)oImg.src賦值時(shí),直接從緩存中獲取,所以速度快

想到這一點(diǎn)我只好用更復(fù)雜更穩(wěn)妥的辦法了:
var oImg = new Image();
oImg.onload = function (){alert([oImg.width, oImg.height]);}
oImg.src = docunent.getElementById("c010_jpg").src;
//當(dāng)src被載入后,輸出oImg的寬和高

使用事件和回調(diào)函數(shù)是沒辦法的事情。處理這種異步過程使程序結(jié)構(gòu)變得很難看。

另外,在w3c中( http://www.w3.org/TR/REC-DOM-Level-1/idl-definitions.html)沒有找到HTMLImageElement的readyState和complete屬性,
發(fā)現(xiàn)firefox實(shí)現(xiàn)了complete屬性,而ie實(shí)現(xiàn)了complete屬性和readyState屬性

但是兩者對(duì)屬性的定義好像不同:
firefox: 一個(gè)圖像被下載完畢,complete屬性就是true,沒有下載完畢則為false
ie:一個(gè)圖像沒有被下載完畢,則readyState屬性為uninitialized,complete屬性是false.當(dāng)下載完畢時(shí), readyState為complete,而如果此時(shí)圖片還沒有顯示,complete為false,顯示以后(display:block)此屬性才變成true

沒想到一個(gè)簡(jiǎn)單的功能竟然這么費(fèi)勁,瀏覽器的兼容問題很難順利解決,特別是很多細(xì)節(jié)非常浪費(fèi)時(shí)間,希望別人遇到這些問題時(shí)還是多考慮從服務(wù)端腳本中解決這些問題。從而繞過對(duì)瀏覽器兼容的復(fù)雜測(cè)試。


另外我還非常疑惑,為什么現(xiàn)實(shí)中的ie對(duì)于onload事件,大部分不是異步的,只有少數(shù)同志的ie對(duì)于此事件是異步的。

相關(guān)文章

  • js中值類型和引用類型的區(qū)別介紹

    js中值類型和引用類型的區(qū)別介紹

    這篇文章介紹了js中值類型和引用類型的區(qū)別,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • JavaScript mapreduce工作原理簡(jiǎn)析

    JavaScript mapreduce工作原理簡(jiǎn)析

    MapReduce是一個(gè)編程模型,用于作業(yè)調(diào)度,也是一個(gè)處理和生成超大數(shù)據(jù)集的算法模型的相關(guān)實(shí)現(xiàn),本文將詳細(xì)介紹JavaScript mapreduce工作原理,需要的朋友可以參考下
    2012-11-11
  • 國內(nèi)常用的js類庫大全(CDN公共庫)

    國內(nèi)常用的js類庫大全(CDN公共庫)

    羅列這類js類庫希望能幫助到大家,下面類庫都支持CDN,所以不用擔(dān)心速度問題,就算某個(gè)節(jié)點(diǎn)慢也不會(huì)影響全國其他地區(qū)的訪問速度,支持jQuery,Bootstrap,angular,zepto等js庫的CDN地址
    2020-06-06
  • js array數(shù)組對(duì)象操作方法匯總

    js array數(shù)組對(duì)象操作方法匯總

    這篇文章主要介紹了js array數(shù)組對(duì)象操作方法匯總,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • js中g(shù)etBoundingClientRect( )方法案例詳解

    js中g(shù)etBoundingClientRect( )方法案例詳解

    這篇文章主要介紹了js中g(shù)etBoundingClientRect( )方法案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 新手入門常用代碼集錦

    新手入門常用代碼集錦

    新手入門常用代碼集錦...
    2007-01-01
  • 舉例詳解Python中smtplib模塊處理電子郵件的使用

    舉例詳解Python中smtplib模塊處理電子郵件的使用

    這篇文章主要介紹了舉例詳解Python中smtplib模塊處理電子郵件的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • 用JS實(shí)現(xiàn)一個(gè)TreeMenu效果分享

    用JS實(shí)現(xiàn)一個(gè)TreeMenu效果分享

    用JS實(shí)現(xiàn)一個(gè)TreeMenu效果分享,思路比較簡(jiǎn)單,但很實(shí)用
    2011-08-08
  • Javascript之Number對(duì)象介紹

    Javascript之Number對(duì)象介紹

    本文主要介紹javascript中的Number對(duì)象的用法,講解的很詳細(xì),希望能給大家做一個(gè)參考。
    2016-06-06
  • Javascript Object 對(duì)象學(xué)習(xí)筆記

    Javascript Object 對(duì)象學(xué)習(xí)筆記

    這篇文章主要介紹了Javascript Object 對(duì)象學(xué)習(xí)筆記,需要的朋友可以參考下
    2014-12-12

最新評(píng)論