没有调用Javascript onscroll事件

时间:2012-09-05 15:26:34

标签: javascript ajax events

我有一个我用HTML5 / CSS创建的即时聊天程序,Asynch。 Javascript和PHP。我有一个不断检查用户聊天框的间隔div滚动到底部以方便用户。当用户希望向上滚动以查看以前的消息时,这就成了一个问题,所以我尝试了onscroll事件来停止间隔。我无法让这个工作,所以通过使用onmouseoveronmouseout事件开始和停止间隔,已经走了很长的路。

这适用于台式电脑,因为它们有可见的鼠标。然而,对于移动设备,例如我的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而没有任何运气。

1 个答案:

答案 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;