好的,这是我的情况:
我一直在为一个项目/爱好的聊天室类型的网站工作。当前布局使用html框架。底部框架是“页脚”或“消息输入”框架。顶部框架是显示公共消息的位置。我使用ajax每秒更新顶部帧。它工作正常。我的问题是:
我需要能够将顶部框架一直滚动到底部 - 例如,用户向上滚动以查看旧消息。我目前有一个功能可以让它向下滚动到底部,但每次ajax更新页面时,它会强制它回到底部,所以我无法向上滚动超过一秒钟,这真的令人沮丧。我已经找到了解决方案,但我找不到任何对我有用的东西。我用来滚动到底部的功能如下:
function jumpToPageBottom() {
$('html, body').scrollTop( $(document).height());
}
这是它的工作,但是,如果用户向上滚动以查看较旧的消息,我需要它来停止强制页面到底部。
更新 -
我应该澄清一下,我使用的是实际帧,而不是iframe。我的“索引”页面代码是:
<FRAMESET ROWS="*,90">
<FRAME SRC="header.php" name="display" MARGINWIDTH="0" MARGINHEIGHT="0" FRAMEBORDER="NO">
<FRAME SRC="footer.php" name="message" SCROLLING="no" BORDERCOLOR="00FF00" MARGINWIDTH="0" MARGINHEIGHT="0">
</FRAMESET>
刷新聊天消息的代码是:
<script id="source" language="javascript" type="text/javascript">
function jumpToPageBottom() {
$('html, body').scrollTop( $(document).height());
}
$(function() {
startRefresh();
});
function startRefresh() {
setTimeout(startRefresh,1000);
$.ajax({
url: 'api.php', //the script to call to get data
data: "", //you can insert url argumnets here to pass to api.php
//for example "id=5&parent=6"
dataType: 'json', //data format
success: function(data) //on recieve of reply
{
//--------------------------------------------------------------------
// 3) Update html content
//--------------------------------------------------------------------
$('#output').html(data); //Set output element html
jumpToPageBottom();
}
});
};
</script>
令人耳目一新的只是一种糟糕的方法吗? div的更新方式是否会导致我的一些问题?我很清楚所有这些(显然) - 所以任何建议都会非常感激。
答案 0 :(得分:3)
您需要的基本逻辑是:
var wasAtBottom = isAtBottom();
$('#output').html(data);
if (wasAtBottom) {
jumpToPageBottom();
}
isAtBottom
来自this answer:
function isAtBottom() {
return $(window).scrollTop() + $(window).height() === $(document).height();
}
以下是适用于您的工作演示:http://jsfiddle.net/9q17euuo/2/