2012-09-05 49 views
2

我有一個即時聊天程序,我用HTML5/CSS,Asynch創建。 Javascript和PHP。我有一個時間間隔,不斷檢查用戶的聊天框div被滾動到底部,以方便用戶。當用戶希望向上滾動查看先前的消息時,這成爲一個問題,所以我嘗試了onscroll事件來停止間隔。我無法讓這個工作,所以走了更長的路,通過使用onmouseoveronmouseout事件來啓動和停止時間間隔。Javascript onscroll事件不被稱爲

這對桌面電腦來說非常合適,因爲它們具有可見的鼠標。但是,對於移動設備,例如我的Windows手機(該程序主要是爲該手機設計的),首先必須點擊該消息框(大概是先將不可見的移動鼠標移動到聊天框上),然後滾動手指移動不受影響。

這不是一個主要問題,因爲我可以通知移動用戶先點擊然後滾動,但我覺得成功使用onscroll事件將與桌面用戶的可用性相匹配。

onscroll事件是否存在已知問題?我敢說,我熟悉JS事件,並可以適當地使用它們,但這是我在FF或IE中唯一無法實現的事件。

任何想法或幫助,將不勝感激, 李。

以下是管理啓用/停用滾動檢查的當前事件,其中ScrollCheck()是檢查滾動位置並將其移動的函數(如果不在底部),scrollInterval是保存間隔標識的全局變量。

document.getElementById('messages').onmouseover = function() 
{ 
    clearInterval(scrollInterval); 
} 

document.getElementById('messages').onmouseout = function() 
{ 
    scrollInterval = setInterval(ScrollCheck, 300); 
} 

我只是取代了onmouseover事件onscroll沒有任何的運氣。

+1

問題需要代碼?你做了什麼? –

+0

如果您的onscroll事件處理程序只做日誌「Got here!」會發生什麼?到控制檯?那樣有用嗎? – dgvid

+0

@Juan爲你添加了我的代碼。 – Lee

回答

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; 
+0

這是一個非常好的想法,爲什麼我沒有想到這一點! – Lee

+0

如果我每次在工作幾小時後問自己這個問題,我就有一美元,我不需要工作XD –

+0

哈,謝謝你。這是一個漂亮的小加法。我現在要實施它。 – Lee