container.scrollTop = container.scrollHeight ???


最近在用node.js做一款聊天室的時候,網上查資料發現一行js代碼,不是很清楚是干嘛的,就來搞一搞。

 1 _displayNewMsg: function(user, msg, color){
 2     var container = document.getElementById('historyMsg'),
 3         msgToDisplay = document.createElement('p'),
 4      date = new Date().toTimeString().substr(0,8);
 5     msgToDisplay.style.color = color || '#000';
 6     msgToDisplay.innerHTML = user + '<span class = "timespan">(' + date + '):</span>' + msg;
 7     container.appendChild(msgToDisplay);
 8     container.scrollTop = container.scrollHeight;
 9 }

  container.scrollTop = container.scrollHeight; ???

前面的代碼的作用是將聊天室發送的信息顯示到消息框里邊,猜想container.scrollTop = container.scrollHeight 總是優先顯示消息框的最后一條消息。

百度了一下scrollTop和scrollHeight的意思,大概就是scrollTop表示 “卷”  起來的高度值,what?什么是卷起來?表示很懵逼。

 寫了一段代碼了解一下什么是 “卷” 起來?

//樣式
<style type="text/css">
    #container{
        width:200px;
        height:100px;
        overflow:hidden;
        border:1px solid black;
    }
    #container div {
        width:180px;
        height:240px;
        border:1px solid black;
    }
</style>
//這段代碼主要是一個固定寬度高度的div內部包含一個同樣固定高度寬度的div且高度大於外部div,添加overflow:hidden,將內部div溢出來的部分給隱藏掉
<body>
    <div id="container">
        <div>
            <span>111111111111111111</span>
            <span>222222222222222222</span>
            <span>333333333333333333</span>
            <span>444444444444444444</span>
            <span>555555555555555555</span>
            <span>666666666666666666</span>
            <span>777777777777777777</span>
            <span>888888888888888888</span>
            <span>999999999999999999</span>
            <span>101010101010101010</span>
            <span>121212121212121212</span>
            <span>11111111111111111</span>
            <span>11111111111111111</span>
        </div>
    </div>
    <script type="text/javascript">
        var container = document.getElementById("container");
        container.scrollTop = container.scrollHeight;
    </script>
</body>

結果是醬子的:

有的同學可能不知道沒有 container.scrollTop = container.scrollHeight; 是怎么樣的? 下圖:

對比一下發現,“卷” 起來的意思是,將內部div的內容向上移動的高度值。

那么,scrollHight 呢?

在網上找到一個關於這些值的圖片,下圖:

 

ScrollHeight其實是網頁內容的實際高度。

那么,現在可以知道 container.scrollTop = container.scrollHeight 的意思了,就是每次有新消息時,消息框總是顯示最下方的消息,將之前的消息 ‘卷’ 上去,因為scrollHeight是整個消息框的實際高度,scrollTop卷上去的高度值,必然足夠使其到達底部,看到最新一條消息。

 

看到這里,還想做個實驗,就是scrollTop卷到底步之后,是繼續向上卷,還是到達底部就不能再卷上去呢?

 

將container.scrollTop 的值設置為10000,結果是這樣的

說明scrollTop只能卷到底部。

 

試完 scrollHeight,接着試一下 clientHeight 和 offsetHight ,兩者解釋有點微妙,附上參考的博客 http://blog.csdn.net/fswan/article/details/17238933;

將 scrollHeight 換成 clientHeight 或 offsetHeight 之后,內部 div 向上卷的高度都減少了。

在谷歌,IE,Opera 三種瀏覽器下的高度都略有差別。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM