首頁 > 運維 > 安全 > 主體

捲動scroll如何理解

WBOY
發布: 2023-05-23 13:40:32
轉載
1246 人瀏覽過

滾動寬高

scrollHeight

  scrollHeight表示元素的總高度,包括由於溢出而無法展示在網頁的不可見部分

scrollWidth

  scrollWidth表示元素的總寬度,包括由於溢出而無法展示在網頁的不可見部分

  [注意]IE7-瀏覽器返回值是不準確的

  【1】沒有捲軸時,scrollHeight與clientHeight屬性結果相等,scrollWidth與clientWidth屬性結果相等

<div id="test" ></div><script>//120 120console.log(test.scrollHeight,test.scrollWidth);//120 120console.log(test.clientHeight,test.clientWidth);</script>
登入後複製

  【2】存在滾動條時,但元素設定寬高大於等於元素內容寬高時,scroll和client屬性的結果相等

<div id="test" >
    内容<br>内容<br></div><script>//103(120-17) 103(120-17)console.log(test.scrollHeight,test.scrollWidth);//103(120-17) 103(120-17)console.log(test.clientHeight,test.clientWidth);</script>
登入後複製

  【3】存在捲軸,但元素設定寬高小於元素內容寬高,即存在內容溢出的情況時,scroll屬性大於client屬性

  [注意]scrollHeight屬性有相容性問題,chrome和safari瀏覽器中,scrollHeight包含padding-bottom;而IE和firefox不包含padding-bottom

<div id="test" >
    内容</div><script>//chrome/safari:220(200+10+10)//firefox/IE:210(200+10)console.log(test.scrollHeight);//103(120-17)console.log(test.clientHeight);</script>
登入後複製

頁面尺寸

  document.documentElement.clientHeight表示頁面的可視區域的尺寸,而document.documentElement.scrollHeight表示html元素內容的實際尺寸。但由於各個瀏覽器表現不一樣,分為以下幾種情況

  【1】html元素沒有捲軸時,IE和firefox的client和scroll屬性始終相同,且傳回可視區的尺寸大小;而safari和chrome表現正常,clientHeight返回可視區域大小,而scrollHeight返回元素內容大小

//firefox:  755 755//chrome:   947 8(body元素的margin)//safari:   744 8(body元素的margin)//IE:       768 768console.log(document.documentElement.clientHeight,document.documentElement.scrollHeight)
登入後複製

  【2】html元素存在捲軸時,各個瀏覽器都表現正常。 clientHeight提供了視口區域的尺寸,而scrollHeight提供了元素內容的尺寸

<body ><script>//firefox:  755 1016(1000+8*2)//chrome:   947 1016(1000+8*2)//safari:   744 1016(1000+8*2)//IE:       768 1016(1000+8*2)console.log(document.documentElement.clientHeight,document.documentElement.scrollHeight)</script>
登入後複製

相容

##  因此要取得文件實際高度時,要取得< html>元素的scrollHeight和clientHeight的最大值

var docHeight = Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight);var docWidth  = Math.max(document.documentElement.scrollWidth,document.documentElement.clientWidth);
登入後複製
滾動長度

scrollTop

  scrollTop屬性表示被隱藏在內容區域上方的像素數。元素未捲動時,scrollTop的值為0,若元素被垂直捲動了,scrollTop的值大於0,且表示元素上方不可見內容的像素寬度

scrollLeft

#scrollLeft屬性指示內容區域左側隱藏的像素數。元素未滾動時,scrollLeft的值為0,如果元素被水平滾動了,scrollLeft的值大於0,且表示元素左側不可見內容的像素寬度

  當滾動條滾動到內容底部時,符合以下等式

scrollHeight == scrollTop  + clientHeight
登入後複製
<div id="test" >
    内容</div><button id=&#39;btn1&#39;>点击</button><div id="result"></div><script>btn1.onclick = function(){
    result.innerHTML = 'scrollTop:' + test.scrollTop+';clientHeight:' + test.clientHeight + ';scrollHeight:' + test.scrollHeight
}</script>
登入後複製
  與scrollHeight和scrollWidth屬性不同的是,scrollLeft和scrollTop是可寫的

  [注意]為scrollLeft和scrollTop賦值為負值時,並不會報錯,而是靜默失敗

<div id="test" >
    内容</div><button id=&#39;btn1&#39;>向下滚动</button><button id=&#39;btn2&#39;>向上滚动</button><script>btn1.onclick = function(){test.scrollTop += 10;}
btn2.onclick = function(){test.scrollTop -= 10;}</script>
登入後複製
頁面滾動

  理論上,透過document.documentElement.scrollTop和scrollLeft可以反映和控制頁面的滾動;但是chrome和safari瀏覽器是透過document.body .scrollTop和scrollLeft來控制的

<body ><button id=&#39;btn1&#39; >点击</button><div id="result" ></div><script>btn1.onclick = function(){
    result.innerHTML = 'html的scrollTop:' + document.documentElement.scrollTop +';body的scrollTop:' + document.body.scrollTop;
}</script>    </body>
登入後複製
  所以,頁面的滾動高度相容寫法是

var docScrollTop = document.documentElement.scrollTop || document.body.scrollTop
登入後複製

回到頂部

#  可以利用scrollTop來實現回到頂部的功能

function scrollTop(){    if((document.body.scrollTop || document.documentElement.scrollTop) != 0){
        document.body.scrollTop = document.documentElement.scrollTop = 0;
    }
}
登入後複製
<body >
<button id=&#39;btn&#39; >回到顶部</button>
<script>function scrollTop(){    if((document.body.scrollTop || document.documentElement.scrollTop) != 0){
        document.body.scrollTop = document.documentElement.scrollTop = 0;
    }
}
btn.onclick = scrollTop;</script>
</body>
登入後複製
  還有兩個window的唯讀屬性可以取得整個頁面滾動的像素值,它們是pageXOffset和pageYOffset

#pageXOffset

  pageXOffset表示水平方向上頁面滾動的像素值

#pageYOffset

  pageYOffset表示垂直方向上頁面滾動的像素值

  [注意]IE8-瀏覽器不支援

<body ><button id=&#39;btn1&#39; >点击</button><div id="result" ></div><script>btn1.onclick = function(){
    result.innerHTML = 'pageYOffset:' + window.pageYOffset;
}</script>    </body>
登入後複製
滾動方法

scrollTo(x,y)

  scrollTo(x,y)方法捲動目前window中顯示的文檔,讓文檔中由座標x和y指定的點位於顯示區域的左上角

<body ><button id=&#39;btn&#39; >滚动</button><script>btn.onclick = function(){scrollTo(0,0);}</script>
登入後複製

scrollBy(x,y)##  scrollBy( x,y)方法捲動目前window中顯示的文檔,x和y指定捲動的相對量

<body ><button id=&#39;btn1&#39; >向下滚动</button><button id=&#39;btn2&#39; >向上滚动</button><script>btn1.onclick = function(){scrollBy(0,100);}
btn2.onclick = function(){scrollBy(0,-100);}</script>
登入後複製

【小應用程式】

  利用scrollBy()加setInterval計時器實現簡單的快速捲動功能

<body ><button id=&#39;btn1&#39; >开始滚动</button><button id=&#39;btn2&#39; >停止滚动</button><script>var timer = 0;
btn1.onclick = function(){
    timer = setInterval(function(){
        scrollBy(0,10);
    },100)}
btn2.onclick = function(){
    clearInterval(timer);
    timer = 0;
}</script>
登入後複製

scrollIntoView()

  Element.scrollIntoView方法捲動目前元素,進入瀏覽器的可見區域

  此方法可以接受一個布林值作為參數。如果為true,表示元素的頂部與當前區域的可見部分的頂部對齊(前提是當前區域可滾動);如果為false,則表示元素的底部與當前區域的可見部分的尾部對齊(前提是當前區域可滾動)。如果沒有提供該參數,預設為true

<body ><div id="test" ></div><button id=&#39;btn1&#39; >滚动到页面开头</button><button id=&#39;btn2&#39; >滚动到页面结尾</button><script>btn1.onclick = function(){
    test.scrollIntoView();
};
btn2.onclick = function(){
    test.scrollIntoView(false);
}</script>
登入後複製

scrollIntoViewIfNeeded()

  scrollIntoViewIfNeeded(true)方法只在目前元素在視窗中不可見的情況下,才捲動瀏覽器視窗或容器元素,最終讓它可見。如果目前元素在視窗中可見,這個方法什麼也不做 

當alignCenter參數設定為true時,元素會盡可能顯示在視窗的垂直中心位置上

  [注意]此方法只有chrome和safari支援

<body ><div id="test" ></div><button id=&#39;btn&#39; >滚动到页面中间</button><script>btn.onclick = function(){
    test.scrollIntoViewIfNeeded(true)
};</script>
登入後複製

scrollByLines(lineCount)

  scrollByLines(lineCount)方法将元素的内容滚动指定的行髙,lineCount值可以是正值, 也可以是负值

  [注意]该方法只有safari支持

<div id="test" >
    内容</div><button id=&#39;btn1&#39;>向下滚动</button><button id=&#39;btn2&#39;>向上滚动</button><script>btn1.onclick = function(){test.scrollByLines(1);}
btn2.onclick = function(){test.scrollByLines(-1);}</script>
登入後複製

scrollByPages(pageCount)

  scrollByPages(pageCount)方法将元素的内容滚动指定的页面高度,具体高度由元素的高度决定

  [注意]该方法只有safari支持

<div id="test" >
    内容</div><button id=&#39;btn1&#39;>向下滚动</button><button id=&#39;btn2&#39;>向上滚动</button><script>btn1.onclick = function(){test.scrollByPages(1);}
btn2.onclick = function(){test.scrollByPages(-1);}</script>
登入後複製

滚动事件

在页面中相应元素发生变化时,scroll事件会在window对象上触发。当然,scroll事件也可以用在有滚动条的元素上

<body ><div id="result" ></div><script>window.onscroll = function(){
    result.innerHTML = '页面的scrollTop:' + (document.documentElement.scrollTop||document.body.scrollTop);
}</script>    </body>
登入後複製

以上是捲動scroll如何理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!