最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用js小類庫獲取瀏覽器的高度和寬度信息

 更新時間:2012年01月15日 22:26:09   作者:  
在做項目時碰到了要在頁面上顯示一個浮動DIV層的效果。本來做的是在頁面居中時顯示的,但后來經(jīng)過自己的測試發(fā)現(xiàn),當(dāng)網(wǎng)頁中出現(xiàn)了滾動條之后,那個浮動的DIV卻還是在頁面的頂部顯示的
因此當(dāng)用戶在一個較長內(nèi)容的網(wǎng)頁中點擊某一個按鈕顯示DIV層會發(fā)現(xiàn)沒有任何效果(其實已經(jīng)在頁面的頂部顯示了),因此,我們需要準(zhǔn)備的知道用戶當(dāng)前的瀏覽的位置的信息。在實現(xiàn)這個要求之前,先來看看在js中有哪些工具可以讓我們使用:

網(wǎng)頁可見區(qū)域?qū)挘?document.body.clientWidth;
網(wǎng)頁可見區(qū)域高: document.body.clientHeight;
網(wǎng)頁可見區(qū)域?qū)挘?document.body.offsetWidth + " (包括邊線和滾動條的寬)";
網(wǎng)頁可見區(qū)域高:document.body.offsetHeight + " (包括邊線的寬)";
網(wǎng)頁正文全文寬:document.body.scrollWidth;
網(wǎng)頁正文全文高:document.body.scrollHeight;
網(wǎng)頁被卷去的高(ff): document.body.scrollTop;
網(wǎng)頁被卷去的高(ie):document.documentElement.scrollTop;
網(wǎng)頁被卷去的左:document.body.scrollLeft;
網(wǎng)頁正文部分上: window.screenTop;
網(wǎng)頁正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的寬: window.screen.width;
屏幕可用工作區(qū)高度: window.screen.availHeight;
屏幕可用工作區(qū)寬度: window.screen.availWidth;
你的屏幕設(shè)置是  window.screen.colorDepth +" 位彩色";
你的屏幕設(shè)置  window.screen.deviceXDPI +" 像素/英寸";

 

這段資料來源于網(wǎng)絡(luò),看到這么多的相似的概念時我已經(jīng)瘋掉了,但處于技術(shù)人的執(zhí)著,我還是頑強的看完了并做了一些理解。經(jīng)過自己的理解和吸收之后,我覺得如果我每次想獲取一個高度或者寬度信息時我會抓狂的,因此,我對瀏覽器的這些屬性做了一些整理和抽象,按照這樣的三個對象來剝離這么多的相似的屬性,第一個是頁面,第二是窗口,第三個是視口。來看圖片理解我的這三個對象的含義吧:

瀏覽器三層

對這三個概念做一個解釋:

頁面:就是我們制作出來的網(wǎng)頁的頁面的一個抽象,他的高度通常比我們的瀏覽器的高度要高,寬度通常是小于等于我們的瀏覽器寬度

瀏覽器窗口:就是我們使用的瀏覽器的一個抽象,他包含了菜單欄、工具欄、書簽欄、狀態(tài)欄、頁面顯示區(qū)等。因此他的高度絕對大于等于視口的高度,寬度絕對大于等于視口的寬度

視口:就是瀏覽器中顯示頁面的區(qū)域

有了這三個概念鋪底,我們來寫個小類庫,獲取這個“對象”的高度和寬度等信息吧:

復(fù)制代碼 代碼如下:

var Browser = {
};
//頁面
Browser.Page = (function () {
return {
scrollTop: function () {
return Math.max(document.body.scrollTop, document.documentElement.scrollTop);
},
scrollLeft: function () {
return Math.max(document.body.scrollLeft, document.documentElement.scrollLeft);
},
height: function () {
var _height;
if (document.compatMode == "CSS1Compat") {
_height = document.documentElement.scrollHeight;
} else {
_height = document.body.scrollHeight;
}
return _height;
},
width: function () {
var _width;
if (document.compatMode == "CSS1Compat") {
_width = document.documentElement.scrollWidth;
} else {
_width = document.body.scrollWidth;
}
return _width;
}
};
})();
//窗口:
Browser.Window = (function () {
return {
outerHeight: function () {
var _hei = window.outerHeight;
if (typeof _hei != "number") {
_hei = Browser.ViewPort.outerHeight();
}
return _hei;
},
outerWidth: function () {
var _wid = window.outerWidth;
if (typeof _wid != "number") {
_wid = Browser.ViewPort.outerWidth();
}
return _wid;
},
innerHeight: function () {
var _hei = window.innerHeight;
if (typeof _hel != "number") {
_hei = Browser.ViewPort.innerHeight();
}
return _hei;
},
innerWidth: function () {
var _wid = window.innerWidth;
if (typeof _wid != "number") {
_wid = Browser.ViewPort.innerWidth();
}
return _wid;
},
height: function () {
return Browser.Window.innerHeight();
},
width: function () {
return Browser.Window.innerWidth();
}
}
})();
//視口:
Browser.ViewPort = (function () {
return {
innerHeight: function () {
var _height;
if (document.compatMode == "CSS1Compat") {
_height = document.documentElement.clientHeight;
} else {
_height = document.body.clientHeight;
}
return _height;
},
innerWidth: function () {
var _width;
if (document.compatMode == "CSS1Compat") {
_width = document.documentElement.clientWidth;
} else {
_width = document.body.clientWidth;
}
return _width;
},
outerHeight: function () {
var _height;
if (document.compatMode == "CSS1Compat") {
_height = document.documentElement.offsetHeight;
} else {
_height = document.body.offsetHeight;
}
return _height;
},
outerWidth: function () {
var _width;
if (document.compatMode == "CSS1Compat") {
_width = document.documentElement.offsetWidth;
} else {
_width = document.body.offsetWidth;
}
return _width;
},
width: function () {
return Browser.ViewPort.innerWidth();
},
height: function () {
return Browser.ViewPort.innerHeight();
}
}
})();

做幾點說明:
1、已經(jīng)能支持獲取多瀏覽器的內(nèi)部的視口的寬度和高度信息
2、在IE 9中已經(jīng)和其他的瀏覽器(Opera、Chrome、FirFox、Safari)一樣,已經(jīng)能支持用window.innerHeight、window.innerWidth、window.outerHeight、window.outerWidth這四個屬性獲取瀏覽器的窗口、視口的寬度高度信息,但是IE9以前的IE版本是沒有這些屬性的,因此在這樣的情況下,我將視口和窗口的概念等同起來了。
2、雖然window有寬度和高度信息,但是不一定是真正瀏覽器窗口的真正的寬度和高度信息。因為有些瀏覽器返回的結(jié)果中就不含菜單欄、工具欄等的高度信息。
實例演示:
在一個垂直內(nèi)容過多的頁面中,使一個DIV總能保持在視口的中心位置(非精確中心位置):
代碼:
復(fù)制代碼 代碼如下:

window.onload = window.onresize = function () {
var top = Math.round(Browser.Page.scrollTop() + (Browser.ViewPort.height() / 2) - (parseInt(document.getElementById("divCenter").style.height) / 2));
var left = Math.round(Browser.Page.scrollLeft() + (Browser.ViewPort.width() / 2) - (parseInt(document.getElementById("divCenter").style.width) / 2));
document.getElementById("divCenter").style.top = top + "px";
document.getElementById("divCenter").style.left = left + "px";
}

大家測試時可以采用改變窗口大小的方式來查看。
時間不早了,晚安!
源代碼下載查看

相關(guān)文章

  • 如何使用JS console.log()技巧提高工作效率

    如何使用JS console.log()技巧提高工作效率

    這篇文章主要介紹了如何使用JS console.log()技巧提高工作效率,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • JavaScript的變量聲明提升問題淺析(Hoisting)

    JavaScript的變量聲明提升問題淺析(Hoisting)

    大家應(yīng)該都只奧javascript的變量聲明具有hoisting機制,JavaScript引擎在執(zhí)行的時候,會把所有變量的聲明都提升到當(dāng)前作用域的最前面。網(wǎng)上關(guān)于JavaScript的變量聲明提升問題的文章有很多,這篇文章將再次談?wù)勱P(guān)于這方面的問題,有需要的朋友們可以參考借鑒。
    2016-11-11
  • 基于js中style.width與offsetWidth的區(qū)別(詳解)

    基于js中style.width與offsetWidth的區(qū)別(詳解)

    下面小編就為就大家?guī)硪黄趈s中style.width與offsetWidth的區(qū)別(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • ECMAScript中迭代器的深入講解

    ECMAScript中迭代器的深入講解

    在ECMAScript 6增加了一個對象,它不是新的語法或新的內(nèi)置對象,而一種協(xié)議( 迭代器協(xié)議),所有遵守這個協(xié)議的對象,都可以稱之為迭代器,這篇文章主要給大家介紹了關(guān)于ECMAScript中迭代器的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 微信小程序MUI導(dǎo)航欄透明漸變功能示例(通過改變opacity實現(xiàn))

    微信小程序MUI導(dǎo)航欄透明漸變功能示例(通過改變opacity實現(xiàn))

    這篇文章主要介紹了微信小程序MUI導(dǎo)航欄透明漸變功能,結(jié)合實例形式分析了通過改變opacity實現(xiàn)透明度漸變功能相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • 利用圖片的 onerror 事件載入默認(rèn)圖片

    利用圖片的 onerror 事件載入默認(rèn)圖片

    當(dāng)圖片不存在時載入默認(rèn)圖片的代碼
    2009-12-12
  • javascript 兼容所有瀏覽器的DOM擴展功能

    javascript 兼容所有瀏覽器的DOM擴展功能

    技術(shù)文章寫得少,所以有時候想寫點什么卻下不了手,不知道該寫什么;往往到了準(zhǔn)備要寫的時候才發(fā)現(xiàn)自己想寫的東西其實很無聊,甚至覺得很幼稚,于是又關(guān)掉了編緝器
    2012-08-08
  • 手機軟鍵盤彈出時影響布局的解決方法

    手機軟鍵盤彈出時影響布局的解決方法

    這篇文章主要介紹了手機軟鍵盤彈出時影響布局的解決方法的相關(guān)資料,大家開發(fā)移動端的軟件時候,肯定會因為軟鍵盤的彈窗影響布局,這里說下如何解決,需要的朋友可以參考下
    2016-12-12
  • 一文詳解如何處理JavaScript中的NaN

    一文詳解如何處理JavaScript中的NaN

    在?JavaScript?中,NaN(Not-a-Number)表示一個無效的數(shù)字值,通常,它出現(xiàn)在嘗試將無法轉(zhuǎn)換為數(shù)字的值與數(shù)字進行運算時,本文主要來聊聊如何處理JavaScript中的NaN,感興趣的可以了解下
    2025-01-01
  • javascript天然的迭代器

    javascript天然的迭代器

    有一個數(shù)n=5,不用for循環(huán),怎么返回[1,2,3,4,5]這樣一個數(shù)組
    2010-10-10

最新評論

奇台县| 梧州市| 靖州| 乐业县| 岱山县| 民和| 静乐县| 英吉沙县| 伊吾县| 偃师市| 澄城县| 巴林左旗| 思南县| 股票| 安岳县| 吴堡县| 平凉市| 台南县| 鄂托克前旗| 彭山县| 张家口市| 扶余县| 大连市| 象山县| 密山市| 海兴县| 天柱县| 台中市| 琼海市| 枣阳市| 淮南市| 新和县| 汶川县| 宁津县| 区。| 波密县| 德兴市| 鸡西市| 册亨县| 天峨县| 巴彦淖尔市|