在論壇的主題列表頁,滑鼠放到使用者名稱上,會彈出使用者名稱片。這個彈出使用者名稱片的過程是 透過 js 來實現的,下面簡單說一下實現的過程:
1 、當我們在後臺 => 介面 => 介面設定 => 全域性,開啟顯示使用者名稱片時,在 template/default/common/header_common.htm 中,透過 js ,將顯示使用者名稱片的設定,賦給 showusercard 變數
2 、我們檢視一下主題列表頁的模板檔案 template/default/forum/forumdisplay_list.htm,找到
- <a href="home.php?mod=space&uid=$thread%5Bauthorid%5D" c="1">$thread[author]</a>
,這是顯示主題的作者。當滑鼠放到介面的主題作者上,彈出層才會出現。我們注意到,在這個地方並沒有執行 js 程式碼,它的實現是透過設立了 c="1" 這個標識來顯示使用者名稱片。
3 、對模板中的 c 屬性進行監測,是透過 staticjscommon.js 來實現的,開啟 common.js ,翻到最後,有一段在頁面載入完後增加監聽事件的程式碼。
- _attachEvent(window, 'load', cardInit, document);
在頁面 onload 後,執行 cardInit 函式 (具體見 _attachEvent 函式)
4 、在 cardInit 函式中,首先定義了一個 function--cardShow ,然後判斷頁面中的 a 標籤中有沒有 c 屬性。
- if(a[i].getAttribute('c'))
如果有,動態增加 mid 屬性
- a[i].setAttribute('mid', hash(a[i].href));
當滑鼠移上去後,執行 cardShow 函式;
- a[i].onmouseover = function() {cardShow(this)};
滑鼠移出時,清除顯示。
- a[i].onmouseout = function() {clearTimeout(USERCARDST);};
在 cardShow 函式中,最重要的是 ajaxmenu 函式。
- USERCARDST = setTimeout(function() {ajaxmenu(obj, 500, 1, 2, pos, null, 'p_pop card');}, 250);
5 、在 ajaxmenu 函式中,動態建立 div ,然後用 ajaxget 方法獲取 a 標籤的 URL 內容。這樣,使用者名稱片就可以顯示了。