當滑鼠移動過某個元素的時候顯示工具提示
工具提示是很多流覽器中一個非常有用的特徵,但是如果你計畫將它們作為你介面的一部分,可能會有一定的限制。如果你想在自己希望它們出現的時候就讓它們出現,而沒有被截短,並且包含更多的文本,為什麼不創建自己的工具提示呢?
解決方法
在這個例子中,我們將在所有的元素中使用class、hastooltip,讓工具提示顯示。我們將獲得每個元素的title屬性中顯示的工具提示的資訊:
在本章前面的內容中,我們對流覽器事件進行了瞭解,你可能已經知道我們需要創建一些事件的監聽來知道層次(layer)什麼時候出現什麼時候消失。
工具提示通常是在你的滑鼠移動到一個元素上面的時候它會顯示在一個固定的位置,當滑鼠移走的時候它又會消失。JavaScript工具提示也可以跟在滑鼠劃過一個元素的時候跟隨滑鼠移動,但是我個人覺得這樣的設置非常的討厭。在我們的解決方案中,我們將關注mouseover和mousemove兩個事件:
在這段代碼中,我們已經創建了幾個功能,包括addLoadListener,getElementsByAttribute,attachEventListener功能,所以這段代碼是事件監聽功能:
在獲得跨流覽器event object之後,並且從base event 目標元素到一個class為hastooltip的元素,showtip開始創建tooltip(div)。tooltip的內容從目標元素的title屬性轉到tooltip中的一個文本節點。
為了確保流覽器不在我們的增強工具提示上面顯示自己的工具提示,目標元素的title會被清除掉——現在,流覽器中就沒有可顯示的工具提示了,也就不會與我們即將創建的工具提示相衝突了。不要擔心去掉title後的相容性問題:我們稍後還會再放回來的。
控制Opera中顯示的工具提示
Opera在我們將它的字串設置為0值後仍然會顯示原始的標題。如果你希望在流覽器中避免顯示工具提示,你可以使用stopDefaultAction功能來停止mouseover的默認行動。你應該小心處理,防止影響其他的mouseover行為,比如顯示超連結的靜態位址欄。
為了顯示我們工具提示的樣式,我們可以基於目標元素的ID給工具提示元素分配一個ID(targetIDtooltip),並且設置tooltip的class。雖然這種做法允許通過CSS應用格式,但是我們無法提前計算工具提示的位置,所以我們必須使用滑鼠指標的協調機制,在事件發生的時候計算工具提示的位置。
這些都會將工具提示元素增加到body,所以當我們的滑鼠滑過鏈結的時候會神奇的出現一個提示,可以像圖13.1所示:
當滑鼠從這個元素上移開的時候,我們將工具提示從這個文檔刪除,它就會消失了:
在showtip中,我們創建了一個指向tooltip元素的鏈結並且作為目標元素的一個特性,做完了這些之後,我們可以不用搜索整個的DOM就將它去掉。在我們去掉工具提示之前,我們可以重新找回它的內容並且插入到目標元素的title中,這樣我們稍後就可以再用了。
那些目標都存在麼?
你應該檢查在其他的事件監聽器中創建的目標,因為事件往往會熄火,你無法保證它們會按照設定的順序發生。
討論
上面代碼的一個問題就是如果目標元素接近流覽器視窗的右側或者底端,工具提示就會被削減。為了避免這種情況的發生,我們需要確保有足夠的空間可以顯示工具提示,並且將它們放在合適的位置上。
通過檢查滑鼠的位置是否比流覽器視窗的位置減去工具提示的寬度要小,我們就可以知道為了可以再螢幕上合適的現實如何的去做了:
這個功能與先前插入工具提示元素的方法相似。在插入元素之前,我們將它的invisibility設置為“隱藏”。這就意味著它被放置在頁面上,如果可見的話,layer會在頁面上佔據同樣的位置,但是用戶實際上是看不見的。這就讓我們可以測量工具提示的維數,然後將它們放在合適的位置上而用戶又看不見。
為了檢測layer是否放置在了viewpoint外側,我們使用游標相對於視窗的位置。理論上,這個資料可以通過clientX/clientY獲得,但是記住:Safari給出的這個值是個錯誤的值。相反,我們應該使用cursorPosition內的跨流覽器值並且提取滾動位置(這個值就等同於clientX/clientY)。Viewport的大小通過getViewportSize功能獲得,對於每個dimension來說,我們檢查是否滑鼠位置加上layer的大小會比viewport更大。
如果layer的一部分會顯示在viewport外面,我們可以通過在viewport大小中提取它的dimension來放置它,或者,使用游標位置正常放置。
有一個例外就是, layer可能會在兩個方面都顯示在viewport外面,當我們垂直放置它的時候,它會自動位於游標上面。這就防止layer直接顯示在游標上面並且會引發一個mouseout事件。它同時避免目標元素被工具提示所模糊而阻止了用戶點擊。
測量可見的工具提示的尺寸
為了測量工具提示的尺寸,工具提示首先必須追加到檔。這會自動讓它顯示在網頁上,阻止用戶看見它顯示在錯誤的位置上,我們需要隱藏它。我們通過設置它的可見度(visibility)為“隱藏”直到我們最後確定工具提示的位置。
我們在這裏不能使用更多我們熟悉的顯示屬性,因為顯示屬性設置為none的目標是不會被遞呈的,所以無法測量它們的大小。
推薦給同仁
您想要瞭解更多的免費小竅門以便提升你的網站排名嗎?
請馬上聯繫我們網站管理員:
MSN: chenlinwu@cmmail.com
Email: info@rank-ad.com