jQuery 插件入门

先看http://www.cnblogs.com/lideng/p/3605551.html

http://www.cnblogs.com/xcj26/p/3345556.html (非常细致  很多你会想到的问题在这里都有答案)

第一篇博文讲到给jquery增加方法的两种方式

静态方法和 jquery对象的方法

像$.each  这种就属于静态方法   $('xxx').on(...) jquery对象的方法

 

$.extend(object) 可以理解为JQuery 添加一个静态方法。

$.fn.extend(object) 可以理解为JQuery实例添加一个方法。

 

这是雨夜带刀以前写的一个jQuery 插件

http://stylechen.com/jquery-tabs.html

/* =================================================
// jQuery Tabs Plugins 1.0
// author:chenyg@5173.com
// URL:http://stylechen.com/jquery-tabs.html
// 4th Dec 2010
// =================================================*/
// 第一个; 是为了防止和之前没有写;作为结束语句的js发生冲突
;(function($){
    $.fn.extend({
        Tabs:function(options){
            // 处理参数
            options = $.extend({
                event : 'mouseover',
                timeout : 0,
                auto : 0,
                callback : null
            }, options);

            var self = this,   //原来这里写的是 $(this)  但是这里的this 已经是一个Jquery对象了 这个this就是调用Tab那个元素的Jquery对象  也就是$('.demo1')
                tabBox = self.children( 'div.tab_box' ).children( 'div' ),
                menu = self.children( 'ul.tab_menu' ),
                items = menu.find( 'li' ),
                timer;
            // elem是一个Tab head
            var tabHandle = function( elem ){
                    elem.siblings( 'li' )
                        .removeClass( 'current' )
                        .end()
                        .addClass( 'current' );
                    //关于end()
                    //end() 相当于返回初始选择器的结果  这里经过一次 end()操作后 再次得到elem对象
                    // 其实相当于
                    // elem.siblings('li').remove('current');
                    // elem.addClass('current');
                    tabBox.siblings( 'div' )
                        .addClass( 'hide' )
                        .end()
                        .eq( elem.index() )
                        .removeClass( 'hide' );
                    // $().index()   返回选择的元素在同级别元素索引的位置
                },

                delay = function( elem, time ){
                    time ? setTimeout(function(){ tabHandle( elem ); }, time) : tabHandle( elem );
                },

                start = function(){
                    if( !options.auto ) return;
                    timer = setInterval( autoRun, options.auto );
                },

                autoRun = function(){
                    var current = menu.find( 'li.current' ),
                        firstItem = items.eq(0),
                        len = items.length,
                        index = current.index() + 1,
                        item = index === len ? firstItem : current.next( 'li' ),
                        i = index === len ? 0 : index;

                    current.removeClass( 'current' );
                    item.addClass( 'current' );

                    tabBox.siblings( 'div' )
                        .addClass( 'hide' )
                        .end()
                        .eq(i)
                        .removeClass( 'hide' );
                };
            /* items 是Tab head */
            items.bind( options.event, function(){
                /*事件绑定里面的this 就是触发该事件的元素(不是jQuery对象) 在addEventListener中的也是如此  不过如果是时间代理就需要用到target了*/
                delay( $(this), options.timeout );
                if( options.callback ){
                    options.callback( self );
                }
            });

            if( options.auto ){
                start();
                self.hover(function(){
                    clearInterval( timer );
                    timer = undefined;
                },function(){
                    start();
                });
            }

            return this;
        }
    });
})(jQuery);

 

posted @ 2015-03-05 22:32  cart55free99  阅读(242)  评论(0编辑  收藏  举报