zoukankan      html  css  js  c++  java
  • [聊天框]让DIV的滚动条自动滚动到最底部

    要制作一个在线聊天的程序,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息。

    聊天程序是基于AJAX设计的,没有用框架,消息容器是一个DIV,所以问题就在于如何控制DIV的滚动条。

    网上有资料介绍说通过设置scrollTop属性来控制滚动条位置,具体可参见:
    http://hi.baidu.com/chen1345789/blog/item/de727bfb45587b176d22eba1.html

    但同样的代码拿到我这里却完全失效,又仔细查了下资料说XHTML标准下scrollTop的值恒为0,解决办法是使用document.documentElement.scrollTop代替document.body.scrollTop,讲了半天所解决的是整个页面的滚动条。这个方法我是用不了了,因为不是框架结构,所以不可能用body的滚动条控制浏览信息。

    网上关于这个问题的资料很少,连CSDN上也说没有办法。

    不死心,后来查DHTML手册得知DIV有个doScroll方法可以用来模拟滚动条点击,但很令人失望,到了我这里又是完全失效,难道又不被XHTML支持?

    最后终于被我找到三种控制DIV内容滚动的方法:

    方法一:
    使用锚标记要滚动到的位置,然后通过click方法模拟点击滚动到锚所在位置

    <script language="javascript1.2" type="text/javascript">
    function onGetMessage(context) 
    {
    msg.innerHTML+=context;
    msg_end.click(); 
    } 
    </script>
    <div style="500px;overflow:auto">
    <div id="msg" style="overflow:hidden;480px;"></div>
    <div><a id="msg_end" name="1" href="#1">&nbsp</a></div>
    </div>

    方法二:
    利用DIV的scrollIntoView方法,将最底端滚动到可视位置

    [list=1]
    <script language="javascript1.2" type="text/javascript"> function onGetMessage(context) { msg.innerHTML+=context; msg_end.scrollIntoView(); } </script> <div style="500px;overflow:auto"> <div id="msg" style="overflow:hidden;480px;"></div> <div id="msg_end" style="height:0px; overflow:hidden"></div> </div>

    方法三:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="keywords" content="滚动条, scrollbar, 页面底部, 聊天窗口, " />
    <meta name="description" content="有些时候(如开发聊天程序),我们需要将将滚动条(scrollbar)保持在最底部,比如聊天窗口,最新发出和收到的信息要显示在最下方,如果要看到最下方的内容,就必须保证滚动条保持在最底部。" />
    <title>将滚动条(scrollbar)保持在最底部的方法 - 滚动条, scrollbar, 页面底部, 聊天窗口, </title>
    </head>
    <body>
    <div id="example">
    <h3 id="example_title">将滚动条(scrollbar)保持在最底部的方法</h3>
    <div id="example_main">
    <!--************************************* 实例代码开始 *************************************-->
    <script type="text/javascript">
    function add()
    {
    var now = new Date();
    var div = document.getElementById('scrolldIV');
    div.innerHTML = div.innerHTML + 'time_' + now.getTime() + '<br />';
    div.scrollTop = div.scrollHeight;
    }
    </script>
    <span class="notice">请点击“插入一行”按钮,插入最新信息,当出现滚动条时,滚动条将自动保持在底部。</span><br />
    
    <div id="scrolldIV" style="overflow:auto; height: 100px;  400px; border: 1px solid #999;">
    </div>
    <input type="button" value="插入一行" onclick="add();">
    <!--************************************* 实例代码结束 *************************************-->
    </div>
    </div>
    </body>
    </html>

    方法4:
    这个比较复杂也比较灵活一点,就是利用DIV+JS+图片构造一个滚动条,当然了图片是怎么好看怎么用了。
    主要部分就是外层的DIV加个overflow:hidden属性,通过js代码调整内层DIV的margin-left和margin-top来控制内容的滚动,由于上面两种方法已经可以满足需求,所以这种方法没具体做深究,有兴趣的可以试一下

    转自博客园hnyei 寒意

  • 相关阅读:
    PHP序列化和反序列化
    移动端纯css超出盒子出现横向滚动条
    css3盒子flex
    css怎么设置2个div同行,第一个固定宽度,第二个占满剩余的部分
    PHP对象基础
    常用header头
    【转载】文件上传那些事儿,文件ajax无刷上传
    简单工厂模式(Simple Factory Pattern)
    单例模式(singleton)
    UML类图
  • 原文地址:https://www.cnblogs.com/zhixi/p/4955460.html
Copyright © 2011-2022 走看看