web 版微信通訊錄

無聊做了個 web 版的功能跟微信里面那個差不多的通訊錄朽基。

這個通訊錄現(xiàn)在長這個樣子:


幼年期

以后可能就是這個樣子了(我不保證):


完全體

如果我最后放棄改進(jìn)它,你可以在這里找到源碼坦康,然后自己作修改猛铅。

這件事情的由來是寇窑,公司的設(shè)計師在之前的項目里想實現(xiàn)一個跟微信通訊錄一樣的頁面。我沒多少把握能在 web 端實現(xiàn)跟微信原生一樣的功能效果:可以想象東西做出來能覆蓋微信原生 80% 的功能慕的,但剩下的 20% 會被設(shè)計師挑刺當(dāng)成是 bug 阎肝,(比如姓氏的正確分類,比如多個同姓的人的先后排序肮街,比如多音字的處理风题,比如姓氏首字母切換的效果),要實現(xiàn)這 20% 的功能效果很費力氣。所以當(dāng)時就明說要做到一模一樣有困難沛硅,要么多給我點時間做眼刃,要么做一個十分簡單的帶個搜索功能的列表。最終選了后者摇肌。

這周處于迭代中間擂红,有點空閑時間,回想這個通訊錄功能围小,感覺可以做做昵骤。于是先到網(wǎng)上搜搜有沒有現(xiàn)成可靠的插件,發(fā)現(xiàn)竟然沒有肯适。

為什么這個功能會沒有人做呢变秦?忽然就產(chǎn)生自己來做一個的想法。要是做出來能用框舔,也是挺好的蹦玫。

這個功能(或者說是前端插件),首先是要方便 Rails 用戶使用雨饺,假設(shè)有一個不怎么懂前端的后端工程師钳垮,他只需要做一件事:提供一個聯(lián)系人數(shù)組,每個元素有 id/name/url 等等屬性就行额港。其余的事情交給這個插件饺窿。

然后我打算只用原生 javascript 實現(xiàn)所有的功能。這樣可以練習(xí)一下在沒有 jQuery/underscore 的情況下寫代碼移斩。

然后是把這個功能做正確:

  • 聯(lián)系人按姓名正確分類
  • 點索引要跳轉(zhuǎn)到正確的分類
  • 當(dāng)前類別要在頂欄顯示
  • 要有檢索過濾功能

以上目標(biāo)在動手前先寫下來肚医,然后一個個地實現(xiàn),這樣在斷斷續(xù)續(xù)的開發(fā)中也不會亂了優(yōu)先級向瓷。

真正動手時遇到幾個問題:

  • 把中文姓氏正確分類
    最初想法是找一個常用漢字與拼音一一對應(yīng)的哈希表肠套,遇到中文只需要查查表就行,雖然要引入大約十幾KB的數(shù)據(jù)猖任,但查表時間復(fù)雜度低你稚。可惜找了一圈沒找到合適的朱躺。

后來在 ruby-china 論壇找到一個聰明的方法刁赖,用幾行代碼就可以找到中文字的拼音首字母。我在以下幾個環(huán)境測試了下都沒有問題:

  • iOS 10 的 safari

  • iOS 10 的微信长搀,版本 6.3.30

  • android 5.0 的 chrome 宇弛, 版本 51

  • android 5.0 的微信,版本 6.3.30

  • 點擊索引跳轉(zhuǎn)到相應(yīng)類別
    這個用 html 原生的 anchor 實現(xiàn)源请,靈感來自 MDN 枪芒。

  • 實時更新當(dāng)前類別
    要隨著頁面滾動更新頂欄的當(dāng)前類別彻况,不可避免要監(jiān)聽頁面的 scroll 事件。 scroll 事件會在頁面滾動過程中被頻繁觸發(fā)舅踪,可以用 underscore 的 throttle 來限制因事件觸發(fā)而調(diào)用其他方法的頻率纽甘,但我不想引入 underscore 。
    在 MDN 上看到優(yōu)化后的監(jiān)聽 scroll 事件的方式硫朦,思路是利用 requestAnimationFrame 方法設(shè)置開關(guān)贷腕,這個方法會在瀏覽器渲染下一幀前調(diào)用。也就是說可以利用它使得由 scroll 事件觸發(fā)執(zhí)行的事件在每一幀都只被執(zhí)行一次咬展。

  • 圖標(biāo)
    實現(xiàn)搜索功能才發(fā)現(xiàn)沒有搜索常用的“放大鏡”圖標(biāo)泽裳,無論是使用字體圖標(biāo)還是 svg/png 圖標(biāo),都意味著又得引入別的資源破婆′套埽看樣子這個圖標(biāo)不就是個圓圈加根棍子么?自己動手用CSS畫祷舀。

我大致想了下未來這個插件會變成怎樣瀑梗,一是要把UI做得跟微信差不多,現(xiàn)在的太樸素了點裳扯。

然后對同屬一個類別下的聯(lián)系人排序抛丽。排序是個有意思的工作,要選那些可以實現(xiàn)快速插入新元素的算法饰豺。

不過在此之前亿鲜,得先寫一篇介紹這個插件的文章,宣傳一下這個好東西冤吨。我現(xiàn)在很想在付出更大努力前蒿柳,想辦法知道值不值得。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漩蟆,一起剝皮案震驚了整個濱河市垒探,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怠李,老刑警劉巖圾叼,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捺癞,居然都是意外死亡夷蚊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門翘簇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撬码,“玉大人儿倒,你說我怎么就攤上這事版保∥匦Γ” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵彻犁,是天一觀的道長叫胁。 經(jīng)常有香客問我,道長汞幢,這世上最難降的妖魔是什么驼鹅? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮森篷,結(jié)果婚禮上输钩,老公的妹妹穿的比我還像新娘。我一直安慰自己仲智,他們只是感情好买乃,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钓辆,像睡著了一般剪验。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上前联,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天功戚,我揣著相機(jī)與錄音搓萧,去河邊找鬼建芙。 笑死,一個胖子當(dāng)著我的面吹牛赐写,可吹牛的內(nèi)容都是我干的双谆。 我是一名探鬼主播壳咕,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼顽馋!你這毒婦竟也來了谓厘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤寸谜,失蹤者是張志新(化名)和其女友劉穎竟稳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熊痴,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡他爸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了果善。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诊笤。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖巾陕,靈堂內(nèi)的尸體忽然破棺而出讨跟,到底是詐尸還是另有隱情纪他,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布晾匠,位于F島的核電站茶袒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凉馆。R本人自食惡果不足惜薪寓,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澜共。 院中可真熱鬧向叉,春花似錦、人聲如沸嗦董。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽展懈。三九已至销睁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間存崖,已是汗流浹背冻记。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留来惧,地道東北人冗栗。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像供搀,于是被迫代替她去往敵國和親隅居。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,510評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫葛虐、插件胎源、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,024評論 4 62
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一種新的協(xié)議。它實...
    香橙柚子閱讀 23,724評論 8 183
  • 若你懂我 正如一縷陽光 沒有黑暗 也沒雨的悲傷 若你懂我 今夜不必逃亡 在溫柔之鄉(xiāng) 想你在身旁 若你懂我 有個地方...
    文山鹿閱讀 518評論 17 10
  • 谷神不死屿脐,是謂玄牝(pin四聲)涕蚤,玄牝之門,是謂天地之根的诵。綿綿呵若存万栅,用之不勤。 譯文:神西疤,靈驗烦粒,妙驗。牝代赁,雌性的...
    葉子的spring閱讀 2,085評論 0 4