記錄:JavaScript 特效三大系列總結【轉】【侵刪】

一. offset系列

1. offset系列的5個屬性

1. offsetLeft : 用於獲取元素到最近的定位父盒子的左側距離
    * 計算方式: 當前元素的左邊框的左側到定位父盒子的左邊框右側
    * 若是父級盒子沒有定位, 那麼會接着往上找有定位的盒子
    * 若是上級元素都沒有定位,那麼最後距離是與body的left值

2. offsetTop : 用於獲取元素到最近定位父盒子的頂部距離
    * 計算方式:當前元素的上邊框的上側到定位父盒子的上邊框下側
    * 若是父級盒子沒有定位,那麼會接着往上找有定位的盒子
    * 若是上級元素都沒有定位,那麼最後距離是與body的top值

3. offsetWidth :用於獲取元素的真實寬度(除了margin之外的寬度)

4. offsetHeight : 用於獲取元素的真實高度(除了margin之外的高度)

5. offsetParent :用於獲取該元素中有定位的最近父級元素
    * 若是當前元素的父級元素都沒有進行定位,那麼offsetParent爲body

2. 與style.(left/top/width/height)的區別:

1. offset系列的是隻讀屬性,而經過style的方式能夠讀寫
2. offset系列返回的數值類型(結果四捨五入),style返回的是字符串
3. offsetLeft 和 offsetTop 能夠返回沒有定位的元素的left值和top值,而style不能夠

二. scroll系列

1.scroll系列的4個屬性

1. scrollHeight :元素中內容的實際高度(沒有邊框)
    * 若是內容不足,就是元素的高度

2. scrollWidth: 元素中內容的實際寬度(沒有邊框)
    * 若是內容不足,就是元素的寬度

3. scrollTop: onscroll事件發生時,元素向上捲曲出去的距離

4. scrollLeft : onscroll事件發生時,元素向左捲曲出去的距離

2. 兼容問題

(1) 兼容問題瀏覽器

* 未聲明 DTD: 谷歌,火狐,IE9+支持

  document.body.scrollTop/scrollLeft

* 已經聲明DTD:IE8如下支持

 document.documentElement.scrollTop/scrollLeft 

* 火狐/谷歌/ie9+以上支持的

  window.pageYOffest/pageXOffest

(2) 兼容代碼函數

function getScroll() {
        return {
            left: window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0,
            top: window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0
        };
    }

    使用方法:
    1. 取得scrollLeft值: getScroll().left
    2. 取得scrollTop值: getScroll().top

三. client系列

1.client系列的4個經常使用屬性(clientTop和clientLeft這裏不予介紹)

1. clientWidth : 獲取網頁可視區域的寬度

2. clientHeight: 獲取網頁可視區域的高度

3. clientX :獲取鼠標事件發生時的應用客戶端區域的水平座標

4. clientY :獲取鼠標事件發生時的應用客戶端區域的垂直座標

2. 兼容問題

(1) clientWidth 和 clientHeight的兼容問題this

//由瀏覽器對象不一樣致使

* 未聲明 DTD: 谷歌,火狐,IE9+支持

document.body.clientWidth/clientHeight

* 已經聲明DTD:IE8如下支持

document.documentElement.clientWidth/clientHeight

* 火狐/谷歌/ie9+以上支持的

 window.innerWidth/innerHeight

(2) clientWidth 和 clientHeight的兼容代碼spa

function client(){
    if(window.innerWidth){
        return {
            "width":window.innerWidth,
            "height":window.innerHeight
        };
    }else if(document.compatMode === "CSS1Compat"){
        return {
            "width":document.documentElement.clientWidth,
            "height":document.documentElement.clientHeight
        };
    }else{
        return {
            "width":document.body.clientWidth,
            "height":document.body.clientHeight
        };
    }
}
    使用方法:
    1. 取得clientWidth的值: client().width
    2. 取得clientHeight的值: client().height

(3)clientX 和 clientY的兼容問題code

//由事件參數對象的兼容性問題致使

1. 谷歌,火狐,IE9+: 事件參數對象隨着事件處理函數的參數傳入
2. IE8如下: event對象必須做爲window對象的一個屬性(window.event)

(4)clientX 和 clientY的兼容性代碼對象

//將client和scroll的兼容問題進行對象的封裝
    var evtTools={
        //獲取兼容的事件參數對象
        getEvt:function (e) {
            return window.event?window.event:e;
        },
        //獲取的是可視區域的橫座標
        getClientX:function (e) {
            return this.getEvt(e).clientX;
        },
        //獲取的是可視區域的縱座標
        getClientY:function (e) {
            return this.getEvt(e).clientY;
        },
        //獲取向左捲曲出去的距離的橫座標
        getScrollLeft:function () {
            return window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft||0;
        },
        //獲取向上捲曲出去的距離的縱座標
        getScrollTop:function () {
            return window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop||0;
        }
    };

四.總結

網頁可見區域寬: document.body.clientWidth;
網頁可見區域高: document.body.clientHeight;
網頁可見區域寬: document.body.offsetWidth   (包括邊線的寬);
網頁可見區域高: document.body.offsetHeight  (包括邊線的寬);
網頁正文全文寬: document.body.scrollWidth;
網頁正文全文高: document.body.scrollHeight;
網頁被捲去的高: document.body.scrollTop;
網頁被捲去的左: document.body.scrollLeft;
網頁正文部分上: window.screenTop;
網頁正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的寬: window.screen.width;
屏幕可用工做區高度: window.screen.availHeight;
屏幕可用工做區寬度:window.screen.availWidth;
相關文章
相關標籤/搜索