栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

jquery插件开发之实现google+圈子选择功能

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jquery插件开发之实现google+圈子选择功能



具体原理与调用不详述,可看代码注释及DEMO演示(演示中mod.udata.js里有一个汉字转拼音方法,它并不是插件的一部分,但为插件提供了拼音搜索的功能)。

复制代码 代码如下:
;(function ($) {
   
    $.fn.iChoose = function (options) {
        var SELF=this;
        var iset = $.extend({}, $.fn.iChoose.defaults, options);
        var _h,pull=null;
        var main=$(iset.choMain);
        var chose=$(iset.choCls,main);
        var input=$(SELF);
        var tips=$(iset.tips,main);
        var cls=iset.selCls;
        var ids=$(iset.chsIds);
        var _l=iset.limit;
        //若无列表数据则中断
        if(iset.data.length==0){return false}
        //初始化下拉列表
        var tpl='

    ';
            var tplArr=[];
            $.each(iset.data,function(k,v){
                tplArr.push('
  • '+ v.name+'
  • ');
            });
            tpl=tpl+tplArr.join('')+'
';
        if(pull==null){
            main.append(tpl);
        }
        pull=$('.'+iset.pullCls,main);
        _h=pull.find('li').outerHeight(true);
        pull.width(main.width()-2);
        //操作函数
        var Action={
            init:function(){
                //列表鼠标划过
                pull.delegate('li.hook_visible','mouseover',function(){
                    $(this).addClass(cls).siblings().removeClass(cls);
                });
                //选择列表
                pull.delegate('li.hook_visible','click',function(){
                    Action.choose($(this));
                });
                //点击弹出列表
                chose.click(function(){
                    Action.show();
                });
                //移除已选择
                chose.delegate('.'+iset.removeEl,'click',function(){
                    Action.undock($(this));
                });
            },
            move: function(dir) {
                //上下移动 - 上::str=up | 下::step=down;
                var index;
                var item=pull.find('li.hook_visible').filter(':visible');
                var cur=item.filter('.'+cls);
                cur.size()==0 ? index=-1 : index=item.index(cur);
                item.eq(dir=='up' ? (index<1 ? 0 : index-1) : index+1).addClass(cls).siblings().removeClass(cls);
                //移动时跟随滚动
                if(item.size()>_l){
                    //下翻滚动
                    if(dir=='down'){
                        pull.scrollTop((index+2-_l)*_h);
                    }
                    //上翻滚动
                    if(dir=='up'){
                        pull.scrollTop((index-1)*_h);
                    }
                }
            },
            choose:function(el){
                //列表选择
                var mid=el.attr('data-mid');
                var name=el.text();
                tips.before(''+name+'x');
                input.focus();
                el.hide().removeClass('hook_visible');
                //返回选中列表id
                ids.val() =='' ? ids.val(mid) : ids.val(ids.val()+','+mid);
                pull.find('li.hook_visible:first').addClass(cls).siblings().removeClass(cls);
                this.upstyle();
            },
            undock:function(el){
                //删除已选
                var mid=el.attr('data-mid');
                var idsArr=ids.val().split(',');
                input.focus();
                el.parent().remove();
                idsArr=$.grep(idsArr,function(v,k){
                   return v != mid;
                });
                ids.val(idsArr.join(','));
                pull.find('li.hook_'+mid).show().addClass('hook_visible');
                this.upstyle();
            },
            show:function(){
                //显示列表
                pull.slideDown(100,function(){Action.match('')});
                pull.find('li.hook_visible:first').addClass(cls).siblings().removeClass(cls);
                $(SELF).focus();
                tips.hide();
                input.addClass(iset.inputWCls);
            },
            hide:function(){
                //隐藏列表
                pull.slideUp(100);
                $(SELF).blur();
                tips.show();
                input.removeClass(iset.inputWCls);
            },
            upstyle:function(type){
                //更新下拉列表样式 - 当已选换行时 --
                var len=pull.find('li.hook_visible').size();
                if(type=='match'){
                    len=pull.find('li:visible').size();
                }
                if(len<_l){
                    pull.height(_h*len);
                    if(len==0){
                        this.hide();
                    }
                }else{
                    pull.height(_h*_l);
                }
                pull.css('top',chose.outerHeight());
            },
            match:function(str){
                //过滤选择 - 拼音选择须插件支持
                var visible=pull.find('li.hook_visible');
                visible.each(function(){
                    var name=$(this).attr('data-name');
                    name.match(str.toUpperCase())!=null ? $(this).show() : $(this).hide();
                });
                if(visible.size()==0 && $('.'+iset.noResCls).size()==0){
                    pull.find('li:first').before('
  • 暂无可选择列表
  • ')
                    }
                    this.upstyle('match');
                },
                blur:function(str){
                    //非选择区域点击隐藏
                    pull.find('li.hook_visible').each(function(){
                        var name=$(this).text();
                        if(name == str){
                            Action.choose($(this));
                        }
                    });
                    input.val('');
                }
            }
            Action.init();
            //键盘控制 - 绑定输入表单
            $(this).on({
                //键盘弹起
                'keyup change':function(){
                    var val= $.trim(input.val());
                    Action.match(val);
                },
                //失去焦点
                'blur':function(){
                    var val= $.trim(input.val());
                    Action.blur(val);
                },
                //键盘按下 -- 捕获键盘值,以执行对应事件
               
                'keydown':function(e){
                    switch (e.keyCode) {
                        case 8:
                            if($.trim(input.val())==''){
                                e.preventDefault();
                                var last=chose.find('.'+iset.removeEl+':last');
                                if(last.size()>0){
                                    Action.undock(last);
                                }
                            }
                            break;
                        case 27:
                            e.preventDefault();
                            Action.hide();
                            break;
                        case 38:
                            e.preventDefault();
                            Action.move('up');
                            break;
                        case 40:
                            e.preventDefault();
                            Action.move('down')
                            break;
                        case 9:
                        case 13:
                            e.preventDefault();
                            Action.choose(pull.find('.'+cls));
                            break;
                        default:
                            $.noop();
                    }
                }
            });
            //点击非当前区域隐藏弹出层
            main.click(function(e){
                e.stopPropagation();
            });
            $(document).click(function(){
               Action.hide();
            });
        }
        $.fn.iChoose.defaults = {
           
            data:UDatas,
            limit:5,
            choMain:'#iChooseMain',
            pullCls:'icm-list',
            choCls:'.icm-box',
            selItemCls:'icm-item',
            removeEl:'icm-delete',
            selCls:'selected',
            inputWCls:'icm-input-w',
            tips:'.icm-cur-txt',
            noResCls:'hook_noresult',
            chsIds:'#iChooseIds'
        }
    })(jQuery);

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/107826.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号