要制作一个在线聊天的程序,在做最后的修饰时,需要对获得的信息即时滚动以保证用户总能看到最新消息。
聊天程序是基于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方法模拟点击滚动到锚所在位置
< language=\" 1.2\" type=\"text/ \">
function onGetMessage(context)
{
msg.innerHTML+=context;
msg_end.click();
}
</ >
<div style=\"width:500px;overflow:auto\">
<div id=\"msg\" style=\"overflow:hidden;width:480px;\"></div>
<div><a id=\"msg_end\" name=\"1\" href=\"#1\"> </a></div>
</div>
方法二:
利用DIV的scrollIntoView方法,将最底端滚动到可视位置 [list=1]
<
language=\" 1.2\"
type=\"text/ \">
function onGetMessage(context)
{
msg.innerHTML+=context;
msg_end.scrollIntoView();
}
</ >
<div style=\"width:500px;overflow:auto\">
<div id=\"msg\" style=\"overflow:hidden;width: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 ns=\"http://www.w3.org/1999/xhtml\">
<head>
< http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />
< name=\"keywords\" content=\"滚动条, scrollbar, 页面底部, 聊天窗口, \" />
< name=\"de ion\" content=\"有些时候(如开发聊天程序),我们需要将将滚动条(scrollbar)保持在最底部,比如聊天窗口,最新发出和收到的信息要显示在最下方,如果要看到最下方的内容,就必须保证滚动条保持在最底部。\" />
< >将滚动条(scrollbar)保持在最底部的方法 - 滚动条, scrollbar, 页面底部, 聊天窗口, </ >
</head>
<body>
<div id=\"example\">
<h3 id=\"example_ \">将滚动条(scrollbar)保持在最底部的方法</h3>
<div id=\"example_main\">
<!--************************************* 实例代码开始 *************************************-->
< type=\"text/ \">
function add()
{
var now = new Date();
var div = document.getElementById(\'scrolldIV\');
div.innerHTML = div.innerHTML + \'time_\' + now.getTime() + \'<br />\';
div.scrollTop = div.scrollHeight;
}
</ >
<span class=\"notice\">请点击“插入一行”按钮,插入最新信息,当出现滚动条时,滚动条将自动保持在底部。</span><br />
<div id=\"scrolldIV\" style=\"overflow:auto; height: 100px; width: 400px; border: 1px solid #999;\">
</div>
<input type=\"button\" value=\"插入一行\" =\"add();\">
<!--************************************* 实例代码结束 *************************************-->
</div>
</div>
</body>
</html>
方法4:
这个比较复杂也比较灵活一点,就是利用DIV+JS+图片构造一个滚动条,当然了图片是怎么好看怎么用了。
主要部分就是外层的DIV加个overflow:hidden属性,通过js代码调整内层DIV的margin-left和margin-top来控制内容的滚动,由于上面两种方法已经可以满足需求,所以这种方法没具体做深究,有兴趣的可以试一下
继续阅读与本文标签相同的文章
如何准备你的下一次高级开发人员面试?
2019年最安全的浏览器
-
他让我国芯片研究停滞13年,还骗走11亿研发资金,现状如何?
2026-05-14栏目: 教程
-
健乐教学机器人可开展的教学实训内容
2026-05-14栏目: 教程
-
5G套餐曝光遭“吐槽”,iphone11受追捧,导致苹果11销量比较高
2026-05-14栏目: 教程
-
为什么修电脑的叫自己不要杀毒和清理垃圾?
2026-05-14栏目: 教程
-
当水乡建筑遇上机器人,成就乌镇又一网红景点
2026-05-14栏目: 教程
