我有一个我用HTML5 / CSS创建的即时聊天程序,Asynch。 Javascript和PHP。我有一个不断检查用户聊天框的间隔div
滚动到底部以方便用户。当用户希望向上滚动以查看以前的消息时,这就成了一个问题,所以我尝试了onscroll
事件来停止间隔。我无法让这个工作,所以通过使用onmouseover
和onmouseout
事件开始和停止间隔,已经走了很长的路。
这适用于台式电脑,因为它们有可见的鼠标。然而,对于移动设备,例如我的Windows手机 - 该程序主要用于设计,有一个问题,因为您首先必须点击消息框(可能是首先将隐形移动鼠标移到聊天框上),然后滚动手指动作不受影响地滚动。
这不是一个主要问题,因为我可以通知移动用户先点按然后滚动,但我觉得成功使用onscroll
事件会与桌面用户的可用性相匹配。
onscroll
事件是否存在已知问题?我敢说我熟悉JS事件并且可以恰当地使用它们,但这是我在FF或IE中无法工作的唯一事件。
任何想法或帮助将不胜感激, 李。
以下是管理滚动检查开/关的当前事件,其中ScrollCheck()是检查滚动位置的函数,如果不在底部则移动它,scrollInterval是保存间隔id的全局变量。
document.getElementById('messages').onmouseover = function()
{
clearInterval(scrollInterval);
}
document.getElementById('messages').onmouseout = function()
{
scrollInterval = setInterval(ScrollCheck, 300);
}
我只是将onmouseover
事件替换为onscroll
而没有任何运气。
答案 0 :(得分:4)
当我创建聊天页面时,我只会在添加新消息时检查滚动:
var currentScroll = elem.scrollTop, oldmaxScroll = elem.scrollHeight-elem.clientHeight;
// add new message(s) here
var newmaxScroll = elem.scrollHeight-elem.clientHeight;
if( currentScroll == oldmaxScroll) elem.scrollTop = newmaxScroll;