1. 程式人生 > >Div 高度、滾動條距 Div 頂部偏移量、Div 中文件總高度

Div 高度、滾動條距 Div 頂部偏移量、Div 中文件總高度

示例圖說明

     如上圖所示,假設橙色表示滾動條,藍色框表示 div 區域,黑色區域表示看不到的文件部分,高度說明如下:

B:表示 div 元素高度,div 的高度不會隨著內容的編號而編號,與有沒有出現滾動條無關,只與自己的 height 屬性有關

A:表示 div 內文件高度,當沒有出現滾動條時,A文件高度等於 div 高度(A = B);隨著內容的增加出現滾動條時,A 的值會增加

C:滾動條相對 div 元素頂部(top)邊緣的距離,與上面隱藏的文件無關。

A >= B + C;// 圖1 中 C = 0; 圖2 中 A > B + C ;圖3 中 A = B + C;

     div 文件總高度(A)獲取方式如下

var scrollHeight = document.getElementById("#div1").scrollHeight; //scrollHeight 必須 DOM 操作,JQuery 沒有對應方法

var scrollHeight = $("#div1")[0].scrollHeight //可以使用 JQuery 先選擇元素,然後 [0] 轉為 DOM 物件

     div 元素高度(B)獲取方式如下

var height=$("#dvi1").height() // JQuery 操作方式

     div 滾動條相對 div 元素頂部(top)邊緣的高度

var scrollTop = $("#div1").scrollTop();  // JQuery 獲取方式

var scrollTop = document.getElementById("div1").scrollTop; // DOM 方式

編碼示例

回到頂/底部

實現程式碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>Div 距離彙總</title>
    <style type="text/css">
        .test {
            width: 500px;
            height: 300px;
            background-color: #444444;
            overflow: auto;
            color: white;
        }

        h1 {
            margin-top: 80px;
        }
    </style>
    <!-- JQuery CDN-->
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>

    <script type="text/javascript">

        $(function () {
            /**
             * 回到頂部
             */
            $("#top").click(function () {
                $(".test").scrollTop(0);

                /**
                 * scrollTop:div 滾動條距離 div 上邊緣的距離
                 * scrollHeight:div 內文件總高度(包括被隱藏的),當沒有出現滾動條時,scrollHeight = height
                 * height:div 元素的高度,只與自己 height 屬性有關,與滾動條無關
                 */
                let scrollTop = $("#inner").scrollTop();
                let scrollHeight = $("#inner")[0].scrollHeight;
                let height = $("#inner").height();
                console.log("height=" + height, "scrollTop=" + scrollTop, "scrollHeight=" + scrollHeight);

            });

            /**
             * 調到底部
             */
            $("#bottom").click(function () {
                let scrollHeight = document.getElementById("inner").scrollHeight;
                $(".test").scrollTop(scrollHeight);

                let scrollTop = document.getElementById("inner").scrollTop;
                let height = $("#inner").height();
                scrollHeight = document.getElementById("inner").scrollHeight;

                console.log("height=" + height, "scrollTop=" + scrollTop, "scrollHeight=" + scrollHeight);
            });

            /**
             * 運動到中間
             */
            $("#center").click(function () {
                let scrollHeight = document.getElementById("inner").scrollHeight;
                let middle = scrollHeight / 2;
                $(".test").scrollTop(middle);

                let scrollTop = $("#inner").scrollTop();
                let height = $("#inner").height();
                scrollHeight = document.getElementById("inner").scrollHeight;
                console.log("height=" + height, "scrollTop=" + scrollTop, "scrollHeight=" + scrollHeight, "middle=" + middle);
            });
        });

    </script>
</head>
<body>
<div class="test" id="inner">
    <h1>China 1</h1>

    <h1>USA 1</h1>

    <h1>UK 1</h1>

    <h1>China 2</h1>

    <h1>USA 2</h1>

    <h1>UK 2</h1>

    <h1>China 3</h1>

    <h1>USA 3</h1>

    <h1>UK 3</h1>
</div>
<button id="top">回到頂部</button>
<button id="bottom">跳到底部</button>
<button id="center">運動中間</button>
</body>
</html>

訊息區自動滾動到底部

實現程式碼如下:

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>Div 距離彙總</title>
    <style type="text/css">
        .test {
            width: 300px;
            height: 100px;
            background-color: #444444;
            overflow: auto;
            color: white;
        }

        h1 {
            margin-top: 80px;
        }
    </style>
    <!-- JQuery CDN-->
    <script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>

    <script type="text/javascript">

        $(function () {
            /**
             * 傳送訊息時,滾動條自動移動在底部
             */
            $("#send").click(function () {
                let message = $("textarea").val();
                $("#inner").append("<span>" + message + "</span><br>");

                /**
                 * scrollHeight:div 內文件總高度(包括被隱藏的),當沒有出現滾動條時,scrollHeight = height
                 * height:div 元素的高度,只與自己 height 屬性有關,與滾動條無關
                 */
                let scrollHeight = $("#inner")[0].scrollHeight;
                let height = $("#inner").height();
                /**
                 * 滾動條距離元素頂部的高度 + div 元素的高度 = 文件的高度
                 * 這樣滾動條剛好在底部
                 */
                $("#inner").scrollTop(scrollHeight - height);
            });
        });

    </script>
</head>
<body>
<div class="test" id="inner">
</div>
<div class="test">
    <textarea style="width: 100%;height: 100%;background-color: white"></textarea>
</div>

<button id="send">傳送</button>
</body>
</html>