我用ajax写了个简单的聊天室,前端得到数据后,用div.innerHtml+=content,
10秒钟刷一次.
可是这样页面会每隔10秒取一次数据.有的用户反映正在看内容,忽然就闪到最低部了.
我前端页面如何显示数据,才会没有这种情况.
也就是页面如何不闪烁
10秒钟刷一次.
可是这样页面会每隔10秒取一次数据.有的用户反映正在看内容,忽然就闪到最低部了.
我前端页面如何显示数据,才会没有这种情况.
也就是页面如何不闪烁
解决方案 »
- jquery tree 数据格式问题
- 问一下如何用js跨域获取网页源文件内容?
- jquery中,$("#id").style.display 这样写会报错?
- 如何用js或jsp获行访客的ip地址信息
- 怎样才可以让数组的每个元素都有自己的对象?
- 如何用javascript增加一行???100分相送!多谢了!各位大侠!
- 两个小问题:怎样判断文件夹的名字合法?怎样比较两个时间?
- 应该怎么写????????
- 我是一个新手,请大家指教。下面是别人写的一段代码,我不明白为什么参数要写成"+x+"、"+i+",真的很迷惑。
- 关于窗口关闭的问题
- 如何点击checkbox不触发关联函数
- 求助,div加了js效果后在IE下透明层不透明了
这个是一个例子
2. 向底部插入新消息时,要把滚动条调整回来(cookie或其他方法保存滚动条的位置)
改成 div.appendChild(document.createTextNode(content));
试试
我看有说用隐藏iframe刷新.页面用document.write,但是具体不知道怎么用.
<!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>
<title></title>
<style type="text/css">
#output
{
border-style:solid;
border-width:1px;
width:350px;
height:200px;
overflow:auto;
}
#content
{
width: 297px;
}
</style>
<script language="javascript" type="text/javascript">
function Send() {
var div = document.getElementById("output");
var str = document.getElementById("content").value;
var d = document.createElement("div");
d.innerHTML = str;
div.appendChild(d); //添加内容
d.scrollIntoView(); //关键是这句
}
</script>
</head>
<body>
<input id="content" type="text" /> <input type="button" value="发送" onclick="Send()" />
<div id="output"></div>
</body>
</html>
这句在ajax的页面里不好使,
现在先不管闪烁的问题
现在问题是滚动条每次离最低部总有一点点距离
当用户发言后,滚动条不到最后面,有个几公分的差距
有人解决办法是设置2个div,每次定位到最后一个div,但是这个方法在我的页面里
有bug,就是不能很准确的定位到最后
<div style="height:100%;width:100%;overflow:auto;border:2px inset white;BORDER-BOTTOM: 2px inset red;">
<div id="chatDiv" style="padding:3px;width:100%;border:0px inset white;overflow:hidden; ">
<table id="chatTb">
</table>
</div>
<div id="chatEND" style="height:0px; overflow:hidden"></div>
</div>function check(){
var url = "/servlet/com.csc.ic.ICSystem?action_=getChatinfos_new&c_id="+c_id;
new Ajax.Request(url, {onSuccess: function(transport) {
eval(transport.responseText);
chatDiv.innerHTML=chatDiv.innerHTML+divContent;
c_id=maxid;
} });
chatEND.scrollIntoView();
}
<head>
<title></title>
</head>
<body>
<div style="height:300px; background-color:#f0f0f0; overflow:hidden;">
<div style="height:100%;width:100%;overflow:auto;border:2px inset white;BORDER-BOTTOM: 2px inset red;">
<div id="chatDiv" style="padding:3px;width:100%;border:0px inset white;overflow:hidden; ">
<table id="chatTb">
</table>
</div>
<div id="chatEND" style="height:0px; overflow:hidden"></div>
</div>
</div><script language="javascript" type="text/javascript">
function check(){ chatDiv.innerHTML = chatDiv.innerHTML + "测试文字 测试文字 ";
chatEND.scrollIntoView();}
window.onload = function() {
setInterval(check, 100);
}
</script>
</body>
</html>
我把你的代码改了一点点
这段代码运行正常
我用的是IE8,FF
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滚动条设置的文章
请大家给我解决一下好吗
当我页面加载的时候,用chatend.scrollIntoView();不好使.滚动条仍在最上面.
当页面10秒刷新的时候就可以了.
然后当我发言后,再次调用chatend.scrollIntoView();,滚动条不动.还在上一次显示的位置,没有随着我的发言内容到最低部.
我的页面document.body.scrollTop为0
document.getElementById("chatDiv").scrollTop也为0
<div class='每条消息'>消息1</div>
<div class='每条消息'>消息2</div>
<div class='每条消息'>消息3</div></div>
<div>姓名</div><div>内容</div>