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 三种浏览器下的高度都略有差别。

转载于:https://www.cnblogs.com/xiang-little/p/6481554.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值