我有一个使用 HTML5/CSS、异步创建的即时聊天程序。 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
,但没有任何运气。
最佳答案
当我制作聊天页面时,我仅在添加新消息时检查滚动:
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;
关于Javascript onscroll 事件未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12284834/