由onclick 和ondblclick談談用戶體驗的問題

這幾天在和US的同事討論一個關於鼠標單擊和雙擊的行爲呈現問題,在這裏拿來分享一下。

 

因爲這是一個日曆控件。日曆控件支持年份的顯示。年份顯示的頁面裏,有該年所有月的日曆。我們都知道日曆控件本身會有事件。

最初的需求是,如果用戶點擊月的天,那麼要彈出一個窗口,這個窗口顯示該天所有的事件排列。雙擊的時候,能夠從年份所在的頁面,切換到所雙擊所在的天的視圖。在實現的過程中,就發現一個問題。每次雙擊,都會觸發單擊事件。這就意味着,在進入選中當天的視圖之前,總要會彈出事件列表窗口。這讓人難以接受。

 

後來經過討論。得出了兩套方案。

 

一種。只支持單擊或者雙擊事件。用onmouseover去替代。

 

但是這個又引入一個問題,用戶只是鼠標滑過,那麼這個時候不見得就需要彈出事件列表。

 

第二種,只支持單擊或者雙擊事件,另外加個detail按鈕,進入選中天的視圖。

 

我們主要講一下第一種。

 

由於用onmouseover去處理,會帶來額外的開銷,窗口彈出的事件列表是動態往服務器發送請求並進行展示。那麼如何能夠判斷用戶是真的想看當天的事件列表,而不是鼠標滑過而已呢。那就有個懸停策略。

 

懸停策略是,當用戶的鼠標停留達到500ms,那麼就認爲用戶需要查看事件列表。從用戶的視覺反應來看,這個是能接受的。

 

那如何知道用戶在這裏停留了超過或者達到500ms,那就需要引入另一個機制,當發生onmouseover的時候,對globalmouse註冊事件監聽onmousemove事件。

 

第一次懸停的時候,記錄一下當前的鼠標的x,y.然後過了500ms,它再繼續檢測一下當前的x,y,如果不發生變化,那就要彈出事件列表。

 

當鼠標離開當前月份的視圖的時候,將註冊事件清除。

 

運用的類都很簡單,lz.Timer和lz.Delegate就能做到。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章