IE和FF下javascript獲取網(wǎng)頁(yè)及窗口大小的區(qū)別
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
在新定義出來(lái)的標(biāo)準(zhǔn)下 document.documentelement.clientheight在ie和火狐里都能獲取正確值,下面一篇文章詳細(xì)介紹了獲取各種瀏覽器可見(jiàn)窗口大小這方面的差別:[br][br][br][br]在本地測(cè)試當(dāng)中:[br]在ie、firefox、opera下都可以使用[br]document.body.clientwidth[br]document.body.clientheight[br]即可獲得,很簡(jiǎn)單,很方便。[br][br]而在公司項(xiàng)目當(dāng)中:[br]opera仍然使用[br]document.body.clientwidth[br]document.body.clientheight[br]可是ie和firefox則使用[br]document.documentelement.clientwidth[br]document.documentelement.clientheight[br][br][br]如果在頁(yè)面中添加這行標(biāo)記的話(huà)[br][br]在ie中:[br]document.body.clientwidth ==> body對(duì)象寬度[br]document.body.clientheight ==> body對(duì)象高度[br]document.documentelement.clientwidth ==> 可見(jiàn)區(qū)域?qū)挾萚br]document.documentelement.clientheight ==> 可見(jiàn)區(qū)域高度[br]在firefox中:[br]document.body.clientwidth ==> body對(duì)象寬度[br]document.body.clientheight ==> body對(duì)象高度[br]document.documentelement.clientwidth ==> 可見(jiàn)區(qū)域?qū)挾萚br]document.documentelement.clientheight ==> 可見(jiàn)區(qū)域高度[br]?[br]在opera中:[br]document.body.clientwidth ==> 可見(jiàn)區(qū)域?qū)挾萚br]document.body.clientheight ==> 可見(jiàn)區(qū)域高度[br]document.documentelement.clientwidth ==> 頁(yè)面對(duì)象寬度(即body對(duì)象寬度加上margin寬)[br]document.documentelement.clientheight ==> 頁(yè)面對(duì)象高度(即body對(duì)象高度加上margin高)[br][br][br]用 javascript 獲取當(dāng)頁(yè)面上鼠標(biāo)(光標(biāo))位置在許多情況下都會(huì)用到,比如拖放,懸停提示(tooltip)等等。當(dāng)然,這里我們依然要面對(duì)瀏覽器的兼容問(wèn)題,在不同的瀏覽器下,對(duì)[br][br]這些相關(guān)的屬性處理方式也不同,本文詳細(xì)介紹了瀏覽器在處理這些屬性時(shí)的差異和最終的解決方法。[br][br][br][br]上面的代碼我們?cè)? 怎么用 javascript 實(shí)現(xiàn)拖拽中已經(jīng)介紹過(guò)了,由于這個(gè)需求我們經(jīng)常用到,所以我們將這段代碼獨(dú)立成一篇文章,供新手查詢(xún)。[br][br]使用方式:[br]code:[br]document.onmousemove = mousemove;[br]function mousemove(ev){[br] ev = ev || window.event;[br] var mousepos = mouseposition(ev);[br]}[br][br]關(guān)于代碼的詳細(xì)說(shuō)明,原文中已經(jīng)介紹,現(xiàn)轉(zhuǎn)到此處:[br][br]我們首先要聲明一個(gè) evnet 對(duì)象,無(wú)論移動(dòng)、點(diǎn)擊、按鍵等,都會(huì)激活一個(gè) evnet ,在 internet explorer 里, event 是全局變量,會(huì)被存儲(chǔ)在 window.event 里. 在 firefox[br][br]或者其他瀏覽器,event 會(huì)被相應(yīng)的函數(shù)獲取.當(dāng)我們將mousemove函數(shù)賦值于document.onmousemove,mousemove 會(huì)獲取鼠標(biāo)移動(dòng)事件。[br][br]為了讓 ev 在所有瀏覽器下獲取了 event 事件,在firefox下"||window.event"將不起作用,因?yàn)閑v已經(jīng)有了賦值。在 msie 中 ev 為空,所以得到 window.event 。[br][br]因?yàn)樵谶@篇文章中我們需要多次獲取鼠標(biāo)位置,所以我們?cè)O(shè)計(jì)了一個(gè) mouseposition 函數(shù),它包含一個(gè)參數(shù) : event 。[br][br]因?yàn)槲覀円?msie 和其他瀏覽器下運(yùn)行,firefox 和其他瀏覽器用 event.pagex 和 event.pagey 來(lái)表示鼠標(biāo)相對(duì)于文檔的位置,如果你有一個(gè) 500*500 的窗口并且你的鼠標(biāo)在絕對(duì)[br][br]中間,那么 pagex 和 pagey 的值都是 250,如果你向下滾動(dòng) 500, 那么 pagey 將變成 750。[br][br]msie 正好相反,它使用 event.clientx 和 event.clienty 表示鼠標(biāo)相當(dāng)于窗口的位置,而不是文檔。在同樣的例子中,如果你向下滾動(dòng) 500,clienty 依然是 250,因此,我們需要[br][br]添加 scrollleft 和 scrolltop 這兩個(gè)相對(duì)于文檔的屬性。最后,msie 中文檔并不是從 0,0 開(kāi)始,而是通常有一個(gè)小的邊框(通常是 2 象素),邊框的大小定義在 [br][br]document.body.clientleft 和 clienttop 中,我們也把這些加進(jìn)去。[br][br]很幸運(yùn),我們現(xiàn)在已經(jīng)用 mouseposition 函數(shù)解決了坐標(biāo)問(wèn)題,不需為此費(fèi)心了。[br]tag標(biāo)簽: ie,ff,javascript,clientwidth,clientheight
該文章在 2010/10/16 16:57:24 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |