天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

基于Jquery 好友選擇器V2.0

個人覺得好友選擇器是一個比較復雜的組件,涉及到前端和后端的整合。在這里我主要是介紹端段如何實現,后端的數據,我用了幾個簡單的ASP頁面來提供。

1.代碼風格

        我的組件是作為一個Jquery 的插件來做的。把整個組件做為一個類來處理。這樣也方便在一個頁面上多個好友選擇器共存而不相互影響。

        所有需要寫的參數都在最下面的giant.ui.friendsuggest.defaults 中給了默認值。在未傳入參數時,會調用默認值。另外,在以下劃線開頭的方法,我約定為私有方法,理論上不允許外部調用它們。

2.Dom結構

      我的DOM結構沒有在JS里面構造出來,而是預先下載xhtml頁面里面。主要考慮當JS不可用時,至少能保證基本的搜索功能。這也符合“漸進增強”的思想。

<div id="ui-fs" class="ui-fs">
    <div class="ui-fs-result clearfix">
    </div>
    <div class="ui-fs-input">
        <input type="text" value="輸入好友姓名(支持全拼輸入)" maxlength="30" />
        <a class="ui-fs-icon" href="Javascript:void(0)" title="查看所有好友">查看所有好友</a>
    </div>
    <div class="ui-fs-list">
       數據加載中....
    </div>
    <div class="ui-fs-all">
        <div class="top">
            <select id="ui-fs-friendtype"><option value="-1">所有好友</option></select>
            <div class="close" title="關閉">關閉</div>
        </div>
        <div class="ui-fs-allinner">
            <div class="page clearfix">
                <div class="llight1">還有<b>30</b>人可選</div><div class="button"><span class="prev"></span><span class="next"></span></div>
            </div>
            <div class="list clearfix">
                數據加載中...
            </div>
        </div>
    </div>
</div>       

3.數據格式

請求了3種不同的數據,首先是好友類別數據,在剛初始化組件的時候去獲取,JSON 格式,格式為

[{name:'以前的同事',id:'1'},{name:'現在的同事',id:'2'}]

然后是對應好友類別的好友總數,用來在點擊彈出所有好友時做分頁使用。數據格式為Int型,直接輸出一個數字就行了。獲取數據時使用的參數為typeId,即好友類別的ID,為-1時獲取所有好友的總數。

最后是好友列表數據,也是JSON格式。格式為:

[{fUid:1,friendUserName:'karry',friendHeadPic:'images/1.jpg'},{fUid:2,friendUserName:'kaliy',friendHeadPic:'images/2.jpg'}]

數據的獲取分兩種情況。

一種是輸入框中輸入字符時獲取的數據,用name參數來存放輸入框中輸入的內容。

第二種是點擊右側按鈕出現的所有好友的情況,由于涉及到分頁、下拉列表框的過濾等,所以參數比較多,有三個參數:typeId、p、pageSize       typeId代表當前的類別,p代表當前的頁碼,pageSize 代表每頁顯示的人數。

4 功能簡介

組件支持多選和單選兩種模式,在初始化組件時通過傳入參數來控制。默認是多選。在單選模式下可以傳入一個回調函數,即當選中某一好友時觸發。

整個組件最核心的部分是對事件的監聽和對數據的異步獲取,組件涉及到了focus、blur、click、keyup,change 五個事件。我在代碼里面是把這五類事件分開放在不同的私有方法里面去綁定的。分別是: _clickBind();_focusBind();_blurBind(); _keyUpBind();  _selectChangeBind();

其中對input進行鍵盤事件的監聽是最復雜的,要考慮到多種情況。通常沒輸入一個鍵都要去后臺請求一次數據,但需要對上下左右方向鍵和回車鍵做不同的處理,大家可以直接看源代碼來了解。

另外一個比較重要的處理就是重復選擇的好友會通過閃動顏色來提示。這里主要是通過setInterval()來實現

var i = 0;
var $obj = $($this.opts.resultContainer).find("[name='" + fUid + "']");
$obj.css("background-color", "#fff");
//變色
var interval = setInterval(function() {
    //IE和FF顏色輸出不一樣
    if ($obj.css("background-color") == "#ffffff" || $obj.css("background-color") == "rgb(255, 255, 255)") {
        $obj.css("background-color", "#6699cc");
        $obj.css("color", "#fff");
    } else {
        $obj.css("background-color", "#ffffff");
        $obj.css("color", "#666666");
    }
    i++;
    if (i == 4) {
        $obj.attr("style", "");
        clearInterval(interval);
    }
}, 300);
 

多選模式下選中的好友可以通過 getResult()方法來獲取,返回一個存放好友id的數組。

5.默認參數: 

        前面大部分參數主要是對DOM中對應的按鈕和容器進行指定 ,在大家不改變DOM結構的前提下是不需要改動這些參數的。

     /**
     * 默認參數
     * <pre>
     * totalSelectNum 多選模式下,最多選取人數,默認為30
     * selectType 選擇模式,默認為多選"multiple",若為單選,則用single
     * selectCallBack 單選模式下,選中之后的回調函數。
     * </pre>
     * */
    giant.ui.friendsuggest.defaults = {
        btnAll:"#ui-fs .ui-fs-icon",
        btnCloseAllFriend:"#ui-fs .ui-fs-all .close",
        btnNextPage:"#ui-fs .ui-fs-all .next",
        btnPrevPage:"#ui-fs .ui-fs-all .prev",
        selectFriendType:"#ui-fs-friendtype",
        allFriendContainer:"#ui-fs .ui-fs-all" ,
        allFriendListContainer:"#ui-fs .ui-fs-all .ui-fs-allinner div.list",
        frinedNumberContainer:"#ui-fs .ui-fs-allinner .page b",
        resultContainer:"#ui-fs .ui-fs-result",
        input:"#ui-fs .ui-fs-input input",
        inputContainer:"#ui-fs .ui-fs-input",
        dropDownListContainer:"#ui-fs .ui-fs-list",
        inputDefaultTip:"輸入好友姓名(支持全拼輸入)",
        noDataTip:"您的好友列表中不存在該好友",
        ajaxUrl:"ajax.ASP",
        ajaxLoadAllUrl:"ajax.ASP",
        ajaxGetCountUrl:"ajaxcount.ASP",
        ajaxGetFriendTypeUrl:"ajaxFriendType.ASP",
        totalSelectNum:30,
        ajaxBefore:null,
        ajaxError:null,
        selectType:"multiple",
        selectCallBack:null
    };

6.調用方式:

在DOM結構沒變的情況下,調用非常簡單。
var test = new giant.ui.friendsuggest();
當然,應該放在$(document).ready(function(){})里面,否則找不到對應的DOM。
如果需要修改參數,就查看上面的默認的參數,哪個需要改,就傳入哪個。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執行]
打包下載

JavaScript技術基于Jquery 好友選擇器V2.0,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久视频精品38线视频在线观看 | 亚洲高清国产拍精品动图 | 曰本老头同性xxxxx | 国产亚洲精品久久久999密臂 | 久久日本精品在线热 | 内射人妻无码色AV麻豆去百度搜 | 午夜成a人片在线观看 | 粉色视频午夜网站入口 | 毛篇片在线观看 | free俄罗斯性xxxxhd派对 | 亚洲 欧美 视频 手机在线 | 日日踫夜夜爽无码久久 | 国产精品美女久久久久AV超清 | 久久毛片免费看一区二区三区 | 最近的2019中文字幕国语版 | 抽插内射高潮呻吟爆乳 | 亚洲 欧美 国产 视频二区 | 久久久久久久久亚洲 | av影音先锋天堂网 | 国内九一激情白浆发布 | 亚洲精品蜜桃AV久久久 | 毛片免费在线播放 | 午夜理伦片免费 | 国产精品内射久久久久欢欢 | 灌饱娇嫩H将军公主最新章节 | 国产成人久久婷婷精品流白浆 | 国产精品悠悠久久人妻精品 | 暖暖视频免费观看视频 | 中文字幕乱码一区久久麻豆樱花 | 色鲁97精品国产亚洲AV高 | 忘忧草研究院一二三 | 日本内射精品一区二区视频 | 把手戳进美女尿口里动态图 | 亚洲乱码在线卡一卡二卡新区 | 亚洲国产夜色在线观看 | 在教室伦流澡到高潮HNP视频 | 国产精品日本无码久久一老A | 邻家美姨在线观看全集免费 | 国产精品亚洲第一区二区三区 | AAA级精品无码久久久国片 | 亚洲伊人色综合久久天天伊人 |