在論壇的主題列表頁,鼠標放到用户名上,會彈出用户名片。這個彈出用户名片的過程是 通過 js 來實現的,下面簡單説一下實現的過程:

1 、當我們在後台 => 界面 => 界面設置 => 全局,開啓顯示用户名片時,在 template/default/common/header_common.htm 中,通過 js ,將顯示用户名片的設置,賦給 showusercard 變量
2 、我們查看一下主題列表頁的模板文件 template/default/forum/forumdisplay_list.htm,找到

  1. <a href="home.php?mod=space&uid=$thread%5Bauthorid%5D" c="1">$thread[author]</a>

,這是顯示主題的作者。當鼠標放到界面的主題作者上,彈出層才會出現。我們注意到,在這個地方並沒有執行 js 代碼,它的實現是通過設立了 c="1" 這個標識來顯示用户名片。
3 、對模板中的 c 屬性進行監測,是通過 staticjscommon.js 來實現的,打開 common.js ,翻到最後,有一段在頁面加載完後增加監聽事件的代碼。

  1. _attachEvent(window, 'load', cardInit, document);

在頁面 onload 後,執行 cardInit 函數 (具體見 _attachEvent 函數)
4 、在 cardInit 函數中,首先定義了一個 function--cardShow ,然後判斷頁面中的 a 標籤中有沒有 c 屬性。

  1. if(a[i].getAttribute('c'))

如果有,動態增加 mid 屬性

  1. a[i].setAttribute('mid', hash(a[i].href));

當鼠標移上去後,執行 cardShow 函數;

  1. a[i].onmouseover = function() {cardShow(this)};

鼠標移出時,清除顯示。

  1. a[i].onmouseout = function() {clearTimeout(USERCARDST);};

在 cardShow 函數中,最重要的是 ajaxmenu 函數。

  1. USERCARDST = setTimeout(function() {ajaxmenu(obj, 500, 1, 2, pos, null, 'p_pop card');}, 250);

5 、在 ajaxmenu 函數中,動態創建 div ,然後用 ajaxget 方法獲取 a 標籤的 URL 內容。這樣,用户名片就可以顯示了。