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

jQuery 1.9.1源碼分析系列(十三)之位置大小操作

 更新時間:2015年12月02日 14:13:54   作者:chua1989  
這篇文章主要介紹了jQuery 1.9.1源碼分析系列(十三)之位置大小操作的相關(guān)資料,需要的朋友可以參考下

先給大家展示謝

jQuery.fn.css (propertyName [, value ]| object )(函數(shù)用于設(shè)置或返回當(dāng)前jQuery對象所匹配的元素的css樣式屬性值。如果需要刪除指定的css屬性,請使用該函數(shù)將其值設(shè)為空字符串("")

  注意:1、如果省略了value參數(shù),則表示獲取屬性值;如果指定了該參數(shù),則表示設(shè)置屬性值。2、css()函數(shù)的所有"設(shè)置"操作針對的是當(dāng)前jQuery對象所匹配的每一個元素;所有"讀取"操作只針對第一個匹配的元素。)

jQuery.fn.offset([coordinatesObj])(設(shè)置或返回當(dāng)前匹配元素(將content+padding+border看成一個整體)相對于當(dāng)前文檔的偏移,也就是相對于當(dāng)前文檔的坐標(biāo)。該函數(shù)只對可見元素有效。該函數(shù)返回一個坐標(biāo)對象(Object),該對象有一個left屬性和top屬性。屬性值均為數(shù)字,它們都以像素(px)為單位。與position()不同的是:offset()返回的是相對于當(dāng)前文檔的坐標(biāo),position()返回的是相對于其定位的祖輩元素的坐標(biāo)。)

jQuery.fn.position()(返回當(dāng)前匹配元素(將content+padding+border+margin看成一個整體)相對于其被定位的祖輩元素的偏移,也就是相對于被定位的祖輩元素的坐標(biāo)。該函數(shù)只對可見元素有效。所謂"被定位的元素",就是元素的CSS position屬性值為absolute、relative或fixed(只要不是默認(rèn)的static即可)。該函數(shù)返回一個坐標(biāo)對象,該對象有一個left屬性和top屬性。屬性值均為數(shù)字,它們都以像素(px)為單位。與offset()不同的區(qū)別詳見offset。此外,position()函數(shù)無法用于設(shè)置操作。如果當(dāng)前元素的祖輩元素全部都是默認(rèn)定位(static),那么該函數(shù)返回的偏移位置與offset()函數(shù)相同)

jQuery.fn.scrollLeft([ value ])(設(shè)置或返回當(dāng)前匹配元素相對于水平滾動條左側(cè)的偏移。當(dāng)一個元素的實際寬度超過其顯示區(qū)域的寬度時,在一定的設(shè)置下,瀏覽器會為該元素顯示相應(yīng)的水平滾動條。此時,scrollLeft()返回的就是該元素在可見的滾動區(qū)域左側(cè)被隱藏部分的寬度(單位:像素)。

  如果水平滾動條在最左側(cè)(也就是可見區(qū)域左側(cè)沒有被隱藏的內(nèi)容),或者當(dāng)前元素是不可水平滾動的,那么scrollLeft()將返回0。對可見的和隱藏的元素均有效。)

jQuery.fn.scrollTop([ value ])(設(shè)置或返回當(dāng)前匹配元素相對于垂直滾動條頂部的偏移。當(dāng)一個元素的實際高度超過其顯示區(qū)域的高度時,在一定的設(shè)置下,瀏覽器會為該元素顯示相應(yīng)的垂直滾動條。此時,scrollTop()返回的就是該元素在可見區(qū)域之上被隱藏部分的高度(單位:像素)。如果垂直滾動條在最上面(也就是可見區(qū)域之上沒有被隱藏的內(nèi)容),或者當(dāng)前元素是不可垂直滾動的,那么scrollTop()將返回0。對可見的和隱藏的元素均有效)

jQuery.fn.height([ value ])(設(shè)置或返回當(dāng)前匹配元素的高度。該高度值不包括元素的外邊距(margin)、內(nèi)邊距(padding)、邊框(border)等部分的高度。如下圖

  

  如果你要獲取包括上述某部分在內(nèi)的高度,請使用innerHeight()和outerHeight()。該函數(shù)屬于jQuery對象(實例),并且對不可見的元素依然有效)

jQuery.fn.innerHeight([ value ])(設(shè)置或返回當(dāng)前匹配元素的內(nèi)高度。該高度值包括內(nèi)邊距(padding),但不包括元素的外邊距(margin)、邊框(border)等部分的高度。如下圖:

  

  該函數(shù)屬于jQuery對象(實例),并且對不可見的元素依然有效)

jQuery.fn.outerHeight([includeMargin])(設(shè)置或返回當(dāng)前匹配元素的外高度。該高度值包括內(nèi)邊距(padding) 、邊框(border),但不包括元素的外邊距(margin)部分的高度。你也可以指定參數(shù)為true,以包括外邊距(margin)部分的高度如下圖:

  

  該函數(shù)屬于jQuery對象(實例),并且對不可見的元素依然有效)

jQuery.fn.width([ value ])(描述:略)

jQuery.fn.innerWidth ([ value ])(描述:略)

jQuery.fn.outerWidth ([includeMargin])(描述:略)

  借用孤月藍風(fēng)上色的詳解圖

 

  接下來分析部分函數(shù)。

a.jQuery.fn.offset分析

  offset獲取的方法如下(以top為例):

  offset.top = elem距瀏覽器視窗頂部的位置 + 文檔頂部被卷起來的部分 – elem距離父元素上邊框高度top。

  jQuery處理就變成了:

  box = elem.getBoundingClientRect();
  offset.top = box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 );

  這里面IE8-和IE9+等現(xiàn)代瀏覽器有個差別,使用document.documentElement.getBoundingClientRect();IE8-的top/left值為-2px;其他現(xiàn)代瀏覽器top/left值為0px;可以看出IE8-瀏覽器是以窗口的(2,2)坐標(biāo)為原點坐標(biāo)的。

  瀏覽器會默認(rèn)body和窗口之間有8px的間隙,所以使用document.body.getBoundingClientRect(); 得到的top/left值為8px。

  offset的設(shè)置方法如下(以top為例):

  需要注意在設(shè)置之前,如果當(dāng)前elem的position為static則要設(shè)置為relative才能處理

  先得到要設(shè)置給elem的css特征top的值計算方法為

  setTop = (要設(shè)置的offset top值 – 當(dāng)前元素的offset top值)+ elem的css top特征值

  然后將setTop設(shè)置給elem的css top特征。

  jQuery的處理就變成了:

   

 var curElem = jQuery( elem ),
    curOffset = curElem.offset(),
    curCSSTop = jQuery.css( elem, "top" ),
    props = {}, curPosition = {}, curTop;
  //如果top值為auto且position為absolute或fixed則需要計算當(dāng)前elem的css特征top的值
  if ( calculatePosition ) {
    curPosition = curElem.position();
    curTop = curPosition.top;
  } else {
    curTop = parseFloat( curCSSTop ) || ;
  }
  if ( options.top != null ) {
    props.top = ( options.top - curOffset.top ) + curTop;
  }
  curElem.css( props );

b.jQuery.fn.position

  position只能獲取不能設(shè)置,獲取方法如下(以top為例):

  position.top = elem的offsetTop - elem被定位的祖輩元素的offsetTop – elem的marginTop值

  這里面這個top就真的是elem的css屬性top的值了。對于jQuery來說這個elem把width+padding+border+margin看成了一個整體,所以最終得到的top是elem這個整體距離被定為祖輩元素頂部內(nèi)邊的距離。

  jQuery的處理變成了:

var offsetParent, offset,
    parentOffset = { top: 0, left: 0 },
    elem = this[ 0 ];
  //當(dāng)元素為fixed定位是他的被定位的祖輩元素是window視窗(parentOffset = {top:0, left: 0}
  if ( jQuery.css( elem, "position" ) === "fixed" ) {
    //假設(shè)getBoundingClientRect可用
    offset = elem.getBoundingClientRect();
  } else {
    //獲取offsetParent
    offsetParent = this.offsetParent();
    // Get correct offsets
    offset = this.offset();
    if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
      parentOffset = offsetParent.offset();
    }
    //增加邊框
    parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
  }
  return {
    top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true )
  };

  里面jQuery.fn.offsetParent()函數(shù)獲取最近的祖先定位元素。

 offsetParent: function() {
      return this.map(function() {
        var offsetParent = this.offsetParent || document.documentElement;
        while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
          offsetParent = offsetParent.offsetParent;
        }
        return offsetParent || document.documentElement;
      });    }

c.jQuery.fn.scrollLeft和jQuery.fn.scrollTop

  這兩個函數(shù)的獲取和設(shè)置滾動條位置比較簡單,以scrollTop為獲取無非就只有兩個函數(shù)window[ pageYOffset]或elem [scrollTop]。而設(shè)置直接使用window[scrollTo]或elem[scrollTop]

以上內(nèi)容是小編給大家介紹的關(guān)于jQuery 1.9.1源碼分析系列(十三)之位置大小操作,希望大家喜歡。

相關(guān)文章

  • jQuery中trigger()與bind()用法分析

    jQuery中trigger()與bind()用法分析

    這篇文章主要介紹了jQuery中trigger()與bind()用法,結(jié)合實例形式分析了trigger()與bind()的功能、定義及具體使用技巧,需要的朋友可以參考下
    2015-12-12
  • jQuery+Datatables實現(xiàn)表格批量刪除功能【推薦】

    jQuery+Datatables實現(xiàn)表格批量刪除功能【推薦】

    這篇文章主要介紹了jQuery+Datatables實現(xiàn)表格批量刪除功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • 改善用戶體驗的五款jQuery插件分享

    改善用戶體驗的五款jQuery插件分享

    改善網(wǎng)頁的用戶體驗,可以從以下幾個方面入手:菜單欄,tab,登錄/注冊,搜索,以及404頁面。對于每一方面的優(yōu)化,Gevin分別向大家推薦一個自己私藏的jquery插件,希望對大家有幫助,也歡迎大家多多交流
    2011-05-05
  • Javascript jquery css 寫的簡單進度條控件

    Javascript jquery css 寫的簡單進度條控件

    很多的時候用戶需要等待你“臃腫”的 Javascript 代碼處理完成(Web 2.0 的特色)。期間或許加入一個類似于進度條的東西讓用戶有點“安慰”。這個東西實現(xiàn)起來并不復(fù)雜,無非就是獲得總的處理條目,然后獲得一個百分比,再顯示輸出。
    2008-03-03
  • 網(wǎng)頁前端優(yōu)化之滾動延時加載圖片示例

    網(wǎng)頁前端優(yōu)化之滾動延時加載圖片示例

    做web開發(fā)的朋友都應(yīng)該掌握前端優(yōu)化這個技巧,其中一個就是滾動延時加載。這個技巧應(yīng)用在了很多地方,比如新浪微博網(wǎng)頁版。以下就為大家詳細(xì)介紹,需要的朋友可以參考下
    2013-07-07
  • jQuery實現(xiàn)點擊按鈕彈出可拖拽模態(tài)對話框完整實例【測試可用】

    jQuery實現(xiàn)點擊按鈕彈出可拖拽模態(tài)對話框完整實例【測試可用】

    這篇文章主要介紹了jQuery實現(xiàn)點擊按鈕彈出可拖拽模態(tài)對話框的方法,結(jié)合完整實例形式分析了jQuery調(diào)用模態(tài)對話框的基本原理、實現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下
    2023-04-04
  • jQuery獲取剪貼板內(nèi)容的方法

    jQuery獲取剪貼板內(nèi)容的方法

    這篇文章主要介紹了jQuery獲取剪貼板內(nèi)容的方法,結(jié)合實例形式分析了jQuery針對不同瀏覽器獲取剪貼板內(nèi)容的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 基于jquery循環(huán)map功能的代碼

    基于jquery循環(huán)map功能的代碼

    前些天記錄了java中for循環(huán)取map,發(fā)現(xiàn)用jquery的each一樣可以取map(我稱之為js的map,不要較勁),且順序和map中順序一致。
    2011-02-02
  • jQuery Selectors(選擇器)的使用(四-五、內(nèi)容篇&可見性篇)

    jQuery Selectors(選擇器)的使用(四-五、內(nèi)容篇&可見性篇)

    本系列文章主要講述jQuery框架的選擇器(Selectors)使用方法,我將以實例方式進行講述,以簡單,全面為基礎(chǔ),不會涉及很深,我的學(xué)習(xí)方法:先入門,后進階!
    2009-12-12
  • jQuery中ajax錯誤調(diào)試分析

    jQuery中ajax錯誤調(diào)試分析

    jQuery中把ajax封裝得非常好。但是日常開發(fā)中,我偶爾還是會遇到ajax報錯。本文進行簡單分析一下ajax報錯。需要的朋友可以參考下
    2016-12-12

最新評論

池州市| 襄樊市| 阜平县| 顺昌县| 宁强县| 金塔县| 浦县| 石屏县| 图木舒克市| 清河县| 满洲里市| 承德县| 余江县| 分宜县| 拜泉县| 鄂伦春自治旗| 陈巴尔虎旗| 台南县| 江安县| 宝清县| 三台县| 青岛市| 漳浦县| 清丰县| 衡山县| 武汉市| 彭州市| 太仆寺旗| 镇宁| 红河县| 蕲春县| 平乡县| 都兰县| 吴堡县| 邳州市| 那坡县| 北票市| 宿迁市| 双柏县| 罗甸县| 开远市|