1. 程式人生 > >js通訊錄效果,你見過麼

js通訊錄效果,你見過麼

最近有一個需求,要寫一個通訊錄效果的聯絡人列表效果,相信這個大家都不陌生,當然當我寫到一半的時候,同事告訴我這個是android和IOS的需求,,,十分鬱悶,但是本人求知慾甚是強烈,就用jq實現了這個功能。

現在我們先來看一下這個功能演示,這個實現了基本的功能,不過一些過渡的動畫沒有寫上,後期會補上,大家想用的話,自行不上這個過渡效果:


通訊錄效果演示.gif

首先我們來看一下html的佈局,這個佈局很簡單

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="format-detection" content="telephone=no">
    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="0" />
    <title>Title</title>
    <style>
    *{padding: 0;margin: 0}
html,body{
    width: 100%;height: 100%;box-sizing: border-box;
    font-size: 62.5%;
}
a,ul,li{
    list-style: none;
    text-decoration: none;
}
.slider{width: 100%;height: 100%;position: relative ; padding-top: 1.5rem }
.sliderNav{width: 10%;position: fixed;right: 0;height: 100%;text-align: center;top: 1.5rem;}
.slider>h2{
    font-size: 2rem;
    line-height: 3.5rem;
    padding-left: 1.5rem;
}
.sliderNav>li>a{
    font-size: 2rem;
    color: #18a2ff;
}
.slider-content{
    position: absolute;
    left: 1.5rem;
    width: 85%;
}
.slider-content>div{
    font-size: 30px;
    padding-left: 1.5rem;
    height: 50px;
    line-height: 50px;
    background-color: #7f8393;
}
.slider-content>div:nth-child(2n+1){
    background-color: #bff3de;
}
.slider-content>div:nth-child(2n){
    background-color: #7f8393;
}

.slider-content>ul{
    padding-top: 0.5rem;
}
.slider-content>ul>li{
    line-height:3rem;
}
    </style>
    <script src="jquery.min.js"></script>
    <script src="codeList.js"></script>
    <script src="test.js"></script>
    <link rel="stylesheet" href="test.css">
</head>
<body>

<div class="slider" id="slider">
    <h2 >邀請的好友列表</h2>
    <div class="slider-content" id="sliderContent"></div>
    <ul class="sliderNav" id="sliderNav"></ul>
</div>
</body>
<script>

</script>
</html>

鑑於檔案的太多,引入的檔案部分我會以連結的形式,大家可以跳轉頁面,下載相應的部分

  1. 引入一個jquery檔案
  2. 變數 的引入,其中需要引入一個 字元的Unicode編碼範圍為19968至40869
  3. 對應的漢字轉碼
    4.列表顯示的資料展示

111111111111111111111.png

相關連結請跳轉此處


2016121411540catFish.jpg


有了以上的條件,我們來看js實現部分

/**
 * Created by Administrator on 2017/1/5.
 */

$(function () {
    var obj = getInviterFirst(inviter);
    getSliderNav(obj.inviterFirst);
    console.log(obj.sortInviter);
    getSliderContent(obj.sortInviter);
});
function getSliderContent(object) {
    var html = '';
    var _li_html = '';
    for(var i in object){
        console.log(i);
        for (var j = 0 ; j < object[i].length; j++){
            _li_html+='<li>'+object[i][j]+'</li>';
        }
        html += '<div id='+i+'><span>'+i+'</span></div><ul >'+_li_html+'</ul>';
        _li_html = '';
    }
    $('#sliderContent').html(html);
}
/**
 * 字母排序
 * @param a
 * @param b
 * @returns {number}
 */
function mySorter(a, b){
    if (/^\d/.test(a)^/^\D/.test(b)) return a>b?1:(a==b?0:-1);
    return a>b?-1:(a==b?0:1);
}
/**
 * 獲取通訊錄右側的索引
 * @param array
 */
function getSliderNav(array) {
    var html = '';
    for (var i = 0; i < array.length ; i ++){
        html+='<li ><a href=#'+array[i]+'>'+array[i]+'</a></li>';
    }
    $('#sliderNav').append(html);
    $('.sliderNav li').css('height',($('.sliderNav').height()-35)/array.length);
    $('.sliderNav li').css('line-height',($('.sliderNav').height()-35)/array.length+'px');

}
/**
 * 獲取所有資料包含的首字母,並且去重,按照字母順序進行排序,並將資料按照首字母進行分類
 * @param arr
 * @returns {*|Array.<T>}
 */
function getInviterFirst(arr){
    var objObj = {};
    var array = [];
    var objArr = [];
    for (var i = 0 ; i < arr.length ; i ++){
        array.push(query(arr[i]));
        console.log(query(arr[i]));
        if (!objObj.hasOwnProperty(query(arr[i]))){
            objArr = [];
            objArr.push(arr[i]);
            objObj[query(arr[i])] = objArr;

        }else{
            objArr.push(arr[i]);
        }
    }

    return obj = {
        sortInviter:objObj,
        inviterFirst:(Array.from(new Set(array))).sort(mySorter)
    };
}
/**
 *檢視拼音首字母縮寫
 */
function query(str){
    if(str == "") return;
    var arrRslt = makePy(str);
    return arrRslt[0].toLowerCase().substr(0,1);
}
/**
 * 引數,中文字串
 * 返回值:拼音首字母串陣列
 * @param str
 * @returns {*}
 */
function makePy(str){
    if(typeof(str) != "string")
        throw new Error(-1,"函式makePy需要字串型別引數!");
    var arrResult = new Array(); //儲存中間結果的陣列
    for(var i=0,len=str.length;i<len;i++){
        //獲得unicode碼
        var ch = str.charAt(i);
        //檢查該unicode碼是否在處理範圍之內,在則返回該碼對映漢字的拼音首字母,不在則呼叫其它函式處理
        arrResult.push(checkCh(ch));
    }
    //處理arrResult,返回所有可能的拼音首字母串陣列
    return mkRslt(arrResult);
}

function checkCh(ch){
    var uni = ch.charCodeAt(0);
//如果不在漢字處理範圍之內,返回原字元,也可以呼叫自己的處理函式
    if(uni > 40869 || uni < 19968)
        return ch; //dealWithOthers(ch);
//檢查是否是多音字,是按多音字處理,不是就直接在strChineseFirstPY字串中找對應的首字母
    return (oMultiDiff[uni]?oMultiDiff[uni]:(strChineseFirstPY.charAt(uni-19968)));
}

function mkRslt(arr){
    var arrRslt = [""];
    for(var i=0,len=arr.length;i<len;i++){
        var str = arr[i];
        var strlen = str.length;
        if(strlen == 1){
            for(var k=0;k<arrRslt.length;k++){
                arrRslt[k] += str;
            }
        }else{
            var tmpArr = arrRslt.slice(0);
            arrRslt = [];
            for(k=0;k<strlen;k++){
                //複製一個相同的arrRslt
                var tmp = tmpArr.slice(0);
                //把當前字元str[k]新增到每個元素末尾
                for(var j=0;j<tmp.length;j++){
                    tmp[j] += str.charAt(k);
                }
                //把複製並修改後的陣列連線到arrRslt上
                arrRslt = arrRslt.concat(tmp);
            }
        }
    }
    return arrRslt;
}

哈哈,看著這個通訊錄效果雖然比較簡陋但是基本效果還是實現了,大家可以引用在此基礎上進行修改以滿足你們的需求欲,如有疑問請留言或者傳送我的郵箱[email protected]
不足之處大家儘可以指出來,方便交流探討


今晚加個雞腿.jpg

相關推薦

js通訊錄效果

最近有一個需求,要寫一個通訊錄效果的聯絡人列表效果,相信這個大家都不陌生,當然當我寫到一半的時候,同事告訴我這個是android和IOS的需求,,,十分鬱悶,但是本人求知慾甚是強烈,就用jq實現了這個功能。 現在我們先來看一下這個功能演示,這個實現了基本的功能,不過一些過渡的動畫沒有寫上,後期會補上,大家想

能藏套套、能防沈迷、能玩桌遊……這些創意手機殼沒!

手機殼兵者詭道也,其實對於創意來說,也是如此。或許很多人會說,手機殼再創意,它也是門小生意。畢竟對某一個創意能夠形成剛需的,總是極少數。就算是藍海,也是一個規模很小的藍海。話雖如此,但很多時候,恰恰是許多創業者的命門——什麽都擠著去風口上,然後錯過了很多獲得第一桶金的小藍海。反觀工具型手機殼,其實有很多思路可

智能玻璃嗎?

辦公室 導讀 元素 大氣 排列 液晶 特殊 玄機 實現 [導讀]如果玻璃變得智能化,又會怎麽樣呢?  傳統的玻璃存在的狀態一般為三種。透明狀,不透,半透!工藝中加入特殊元素會產生有色現象。在家庭生活裏更是不可或缺,那麽如果玻璃變得智能化,又會怎麽樣呢?小編今天要介紹的是一款

Java之父22年前寫的一段程式碼嗎?

Java之父高斯林是一位加拿大的計算機天才。 他創造了偉大的程式語言——Java,在TIOBE排行榜上,Java常年排名第一。 現在這位63歲高齡的祖師爺依然戰鬥在程式設計最前線,寶刀不老。 1、Java之父找不到工作? 之算是Java之父,也難逃中老年危機。 高斯林曾在Facebook上

深入15個HTML元素方法嗎?

雖然現代化的 web 開發更多地依賴各種 MVC 框架,但開發者仍需要熟練掌握 HTML 與 DOM 方面的基礎知識。不過,即使是有著多年經驗的前端開發者,也會遇到一些不明所以的情況。本文首先將為初學者介紹 HTML 與 DOM 的基本常識,隨後為大家介紹15個比較冷門的 HTML 元素的方

從“窮逼VIP”論註釋規範哪些奇葩的註釋?

點選有驚喜 最近的“窮逼VIP”事件想必大家有所耳聞!詳細的我就不說了大家可以去看看,當然了出於好奇,我在網上也看到了很多的奇葩的程式設計師寫的註釋來看看吧! 高富屌絲型程式猿 挨批受挫型程式猿 填坑吐槽型程式猿 言語混亂型程式猿 基情講解型

spring的split坑沒?

最近在使用String split分割時出現了下面問題,講道理分出來的陣列是有21位的,可是當我選擇20的下標時,出現了 注意看字串2015-04-03後面有兩個,按照我們之前的想法應該會給

最牛逼的程式設計師是什麼樣的?拳打回車鍵腳踩Emacs編輯器

我自己是一名大資料架構師,目前辭職在做線上教育大資料講師,每天都會直播分享免費公開課,大家可以加群參加。以及我自己整理了一套最新的大資料學習系統教程,包括Hadoop,資料探勘,資料分析。送給正在學習大資料的小夥伴!這裡是大資料學習者聚集地,歡迎初學和進階中的小夥伴!加QQ群:5849001

一封來自惡魔的挑戰邀請函那些或者沒的C語言指標都在這裡了

前言 相信大多數的同學都是第一門能接觸到語言是C/C++,其中的指標也是比較讓人頭疼的部分了,因為光是指標都能專門出一本叫《C和指標》的書籍,足見指標的強大。但如果不慎誤用指標,這些指標很大可能就會像惡魔一樣把你的程式給直接搞崩潰。 3個月前,我編寫了一份這些指標都是惡魔嗎?.c的檔案,裡面從大多數常用的

Python小白很難繞過的六大神坑

Python大家對於這門語言的理解大多是說Python是最簡單的程式語言,但是這幾個深坑肯定是十個人無一未踩過的!特意總結了一下這些坑,看看你踩過沒? 學習Python中有不明白推薦加入交流裙               &n

關於hashCode,一定聽說會重複那麼2個不同的字串hashCode值卻是相同的嗎

java中String.hashCode()方法的演算法如下:str.charAt(0) * 31n-1 + str.charAt(1) * 31n-2 + ... + str.charAt(n-1)據說演算法中31這個數字是對英文字元進行優化後產生的一個最佳數字,但是碰上字

這些Linux數據恢復工具哪幾個

linux數據恢復不論你運用的是臺式電腦仍是筆記本,需求重視的要點之一都是怎麽保護好你的名貴數據。由於總會有各種突發狀況使你的系統潰散,然後你要做的就是恢復數據。不論你怎麽想,要是我失去了一切的數據卻無法恢復的話,我會分分鐘肢解了這臺破電腦。不過幸虧的是,如今商場上有不少的數據恢復工具,能協助咱們從體系的硬盤

每天計算著這點錢怎麽花的日子還要多久?

前端 北漂 據新加坡《聯合早報》網站7月17日報道稱,中國90後或成“不買房一代”,租房由過去不得已變成享受生活的一種方式,輿論以及不少業內人士也都呼籲年輕人租房,不要買房。說的現實一點就是:反正也買不起房,不如把錢省下來租房好好享受吧!可是租房也不便宜啊,楊十八最近了解了一下大北京的租房市場,南三環

VR禁毒體驗了嗎?

研發 img 成了 此舉 pict clas bsp 廣州 嘗試 VR禁毒體驗,你試過了嗎? 大家先來跟著小編的文字,嘗試冥想一下——當你正處於寧靜的情緒中,對於顏色感覺生動、豐富而深刻,感到周圍事物絢麗多彩,五光十色;對音樂的鑒賞能力增強,對其他聲音也很敏感。然後,感到時

果敢老百勝娛樂13208831115淩晨12點後的麥當勞嗎?

自助點餐機已經關閉 人生百態卻剛剛開果敢老百勝娛樂13208831115網址www.lbs818.com你有沒有想過 白天裏充滿歡樂嬉笑的麥當勞餐廳 到了淩晨 會是怎樣一個狀況? 當城市入夜,一切歸於寧靜 到24h營業的麥當勞餐廳的人 都是些什麽人? 問大家一個問題,你印象中的麥當勞是? ——甜品第二個半價

毫秒級檢測!帶GPU的樹莓派嗎?

load 定義 interval += 編譯 lena 驗證 iss 另一個 樹莓派3B+英特爾神經計算棒進行高速目標檢測 轉載請註明作者夢裏茶 代碼: 訓練數據預處理: https://gist.github.com/ahangchen/ae1b7562c1f93f

目前最受歡迎的12個Python開源框架幾個?

python 爬蟲 web 入門 開源 今天給大家帶來了12個在GitHub等開源網站中最受歡迎的Python開源框架。如果你正在學習python,那麽這12個開源框架,千萬別錯過,這些框架包括事件I/O,OLAP,Web開發,高性能網絡通信,測試,爬蟲等。雖說不上是全都有,但也足夠滿足你

5 個非常有用的 Laravel Blade 指令哪些?

內容 def upload user 兩個 doc 系統 使用 hub 接下來我將帶大家認識下五個 Laravel Blade 指令,這些指令將讓你在解決特定問題時如虎添翼。如果你是剛接觸 Laravel 的用戶,這些小技巧能帶你認識到 Laravel Blade 模板引

8個最高效的Python爬蟲框架幾個?

python 爬蟲 入門 詳細 官網 小編收集了一些較為高效的Python爬蟲框架。分享給大家。1.ScrapyScrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。。用這個框架可以輕松爬下來如亞馬遜商品信息之

騷騷的CRT

watermark itl 環境變量 今天 orm shel nbsp port 技術分享 今天朋友發了段命令給我:PS1="\[\e[35;33m\][\[\e[35;33m\]\u\[\e[35;35m\]@\h \[\e[35;35m\]\w\[\e[35m