Javascript onscroll 事件未被调用

标签 javascript ajax events

我有一个使用 HTML5/CSS、异步创建的即时聊天程序。 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 ,但没有任何运气。

最佳答案

当我制作聊天页面时,我仅在添加新消息时检查滚动:

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/

相关文章:

javascript - 如何创建在线 JavaScript 编辑器?

javascript - 在插件函数上创建 setTimeout

javascript - 使用 Socket.Io 监听器获取循环

c# - 子线程处理父级引发的事件

javascript - 当从其他类调用方法时,获取对方法对象的引用(javascript)

javascript - 有没有办法在 SVG 图像中的元素上注册 onclick 事件处理程序?

javascript - "Access is denied"访问 iframe 文档对象时出错

javascript - Internet Explorer 10 忽略 XMLHttpRequest 'xhr.withCredentials = true'

javascript - AJAX Complete Handler 没有被触发

c# - 创建事件处理程序 +=