1. 程式人生 > >jQuery自定義導航外掛的開發過程

jQuery自定義導航外掛的開發過程

前言

在開發過程中,我們經常會使用到外掛,其具有方便靈活的特點,但是如果在市面上找不到自己滿意的外掛,或者想自己封裝一個外掛提供給別人使用時,就需要自己編寫一個jQuery外掛了。
按照功能來分類,外掛可以分為以下三類:

1.封裝物件方法的外掛(就是基於DOM元素的jQuery物件,具有區域性性)
2.封裝全域性函式的外掛(全域性性的封裝)
3.選擇器外掛(類似於.find())

經過這麼長時間的外掛開發,開發者們逐步約定了一些規則,以解決各種因為外掛導致的錯誤和衝突,包括下面的規則:

  1. 外掛名推薦使用jquery.[外掛名].js,以免和其他js檔案或者其他庫相沖突;
  2. 區域性物件附加到jquery.fn物件上,全域性函式附加在jquery上;
  3. 外掛內部,this指向當前的區域性物件;
  4. 可以通過this.each來遍歷所有元素;
  5. 所有的方法或外掛都必須用分號結尾,避免出現問題;
  6. 外掛應該返回的是jquery物件,以保證可鏈式連綴;
  7. 避免外掛內部使用$,如果一定要使用,請傳遞jQuery。

下面我們來自定義開發一個簡單的導航外掛。

外掛開發

首先定義一個導航欄:

<ul class="list">
        <!-- html -->
        <li>導航列表
            <ul class="nav">
                <li
>
導航列表1</li> <li>導航列表1</li> <li>導航列表1</li> <li>導航列表1</li> <li>導航列表1</li> <li>導航列表1</li> </ul> </li> <li>導航列表 <ul
class="nav">
<li>導航列表2</li> <li>導航列表2</li> <li>導航列表2</li> <li>導航列表2</li> <li>導航列表2</li> <li>導航列表2</li> </ul> </li> <li>導航列表 <ul class="nav"> <li>導航列表3</li> <li>導航列表3</li> <li>導航列表3</li> <li>導航列表3</li> <li>導航列表3</li> <li>導航列表3</li> </ul> </li> <li>導航列表 <ul class="nav"> <li>導航列表4</li> <li>導航列表4</li> <li>導航列表4</li> <li>導航列表4</li> <li>導航列表4</li> <li>導航列表4</li> </ul> </li> <li>導航列表 <ul class="nav"> <li>導航列表5</li> <li>導航列表5</li> <li>導航列表5</li> <li>導航列表5</li> <li>導航列表5</li> <li>導航列表5</li> </ul> </li> </ul>

然後寫css,給導航欄設定一下樣式:

.list {
    list-style: none;
    padding: 0;
    font-style: 13;
    color: #fff;
    width: 500px;
    margin: 50px auto;
}

.list li {
    float: left;
    width: 100px;
    height: 30px;
    line-height: 30px;
    text-align: center;
    background: #333;
    cursor: pointer;
}

接下來開始寫外掛js實現部分,先給導航欄設定樣式和下拉特效:

$(".nav").css({
        'list-style' : 'none' ,
        'margin' : 0,
        'padding' :0,
        'display' : 'none'
    });

    $(".nav").parent().hover(function(){
        $(this).find('.nav').slideDown('normal');
    },function(){
        $(this).find('.nav').slideUp('normal');
    })

注意上面的parent(),因為在使用外掛時,我們不知道外部的情況,所以不能直接指定某個標籤或者類來定位,直接指定父元素是肯定不會出錯的。
到這一步已經基本實現了功能,但是你把滑鼠放到父元素的時候會發現,快速的來回導航切換會導致一個類似”波浪的效果”,使用者體驗並不太好,所以我們需要將導航下拉的特效及時的停止,所以要加一個stop()函式。改變後就是:

$(".nav").css({
        'list-style' : 'none' ,
        'margin' : 0,
        'padding' :0,
        'display' : 'none'
    });

    $(".nav").parent().hover(function(){
        $(this).find('.nav').stop().slideDown('normal'); //加上stop函式
    },function(){
        $(this).find('.nav').stop().slideUp('normal'); //加上stop函式
    })

下面我們將其放入jquery.nav.js中封裝好

;(function ($){  //分號為了防止前面程式碼的干擾
    $.extend({
        'nav':function(){
                $(".nav").css({
                    'list-style' : 'none' ,
                    'margin' : 0,
                    'padding' :0,
                    'display' : 'none'
                });

                $(".nav").parent().hover(function(){
                    $(this).find('.nav').stop().slideDown('normal');
                },function(){
                    $(this).find('.nav').stop().slideUp('normal');
                })
                return this;
        }
    })
})(jQuery);

然後在HTML中引入,並在本來的js中呼叫它

$(function(){
    $.nav();
});

這樣就能實現全域性性的導航列表外掛了
這裡寫圖片描述
如果要實現區域性性外掛功能,就要稍作修改了

;(function ($){
    $.fn.extend({   //加上fn
        'nav':function(){
                $(this).find(".nav").css({    //改為this
                    'list-style' : 'none' ,
                    'margin' : 0,
                    'padding' :0,
                    'display' : 'none'
                });

                $(this).find(".nav").parent().hover(function(){  //改為this
                    $(this).find('.nav').stop().slideDown('normal');
                },function(){
                    $(this).find('.nav').stop().slideUp('normal');
                })
                return this;   
        }
    })
})(jQuery);

然後在js裡面呼叫它

$(function(){
    $('.list').eq(0).nav();   //eq()表示呼叫第幾個,同時nav()中可以傳參,改變其它屬性
});

以上就是全部的內容了,大家要將自定義外掛的過程瞭解清楚,掌握其規則,在自己開發時避免踩到更多的坑。

相關推薦

jQuery定義導航外掛開發過程

前言 在開發過程中,我們經常會使用到外掛,其具有方便靈活的特點,但是如果在市面上找不到自己滿意的外掛,或者想自己封裝一個外掛提供給別人使用時,就需要自己編寫一個jQuery外掛了。 按照功能來分類,外掛可以分為以下三類: 1.封裝物件方法的外掛(就是基於D

Fiddler開發實踐之定義匯出外掛

一、準備工作 1.安裝fiddler4; 2.vs2010以上(下方演示截圖都是基於vs2015的); 3.開啟fiddler debug相關功能; 在下圖位置輸入如下內容: 顯示錯誤和異常資訊: prefs set fiddler.debug.extensions.showerro

微信小程式開發筆記2——定義導航欄元件

本文主要是熟悉微信小程式自定義元件的開發,以一個常見的導航欄(Tabbar)需求為例。 官方文件:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/ 首先我們先看一

jQuery 定義網頁滾動條樣式外掛 mCustomScrollbar 的介紹和使用方法

系統預設的滾動條樣式,真的已經看的夠噁心了。試想一下,如果在一個很有特色和創意的網頁中,出現了一根系統中預設的滾動條樣式,會有多麼的彆扭。 為了自己定義網頁中的滾動條的方法,我真的已經找了很久了,就目前尋找的成果來說,找到了兩個比較不錯的 jQuery 外掛:jScrollPane 和 mCustomSc

安卓開發通過定義Gradle外掛實現自動化埋點

一 埋點現狀: 公司APP在實際開發中埋點是一個很碎片化的問題,我總結了以下幾點: 1.變化快,埋點文件經常變化,開發人員不得不修改程式碼,造成了一定的風險 2.頁面埋點之前是通過把握Activity和Fragment的生命週期實現大部分的統一配置,但是這裡面又牽扯到 Fr

jQuery定義外掛

1.新增jQuery物件級的外掛,是給jQuery類新增方法。;(function($){ $.fn.extend({ "函式名":function(自定義引數){ //這裡寫外掛程式碼

iOS開發定義導航欄返回按鈕右滑返回手勢失效的解決---親測是有效的。

問題一:怎麼自定義leftItem問題二:為什麼系統自帶的右滑返回手勢失效問題三:怎麼解決這個失效問題3.怎麼解決這個失效問題 其實很簡單很簡單~只需要新增下面這一句程式碼即可self.navigationController.interactivePopGestureRe

iOS開發定義導航欄返回按鈕右滑返回手勢失效的解決

我相信針對每一個iOS開發者來說~除了根檢視控制器外~所有的介面通過導航欄push過去的介面都是可以通過右滑來返回上一個介面~其實~在很多應用和APP中~使用者已經習慣了這個功能~然而~作為開發者的我們~也並沒有為此做些什麼~因為我們在建立專案時~蘋果公司已經為我們都做好了~那麼~我們這期就來聊一聊這系統

ios開發ios7定義導航欄模擬器和真機執行介面座標不一致

做了一個簡單的自定義導航欄,也就正常的設定了返回按鈕圖片和導航背景圖片,結果在真機上執行的時候突然發現介面的空間向下移了,列印了一下y座標,移動了64,又列印了一下self.view的y座標,盡然也向下移動了64,但是

IOS 開發筆記——定義導航欄返回鍵後如何恢復系統預設返回手勢

       在開發當中,我們不得不要將導航欄的左邊返回按鈕自定義成不同的樣式,但是一當我們自定義樣式後,系統預設的 pop 手勢就失效了,那麼我們該如何做呢?其實這個問題網上也有很多答案,但是每一個答案都非常坑,我都不得不吐槽一下了,老是將問題複雜化,不懂裝懂,最討厭這些

10.Jmeter-二次開發,實現定義函式外掛

1.前提:有時候,Jmeter自帶的函式,可能不能滿足於業務的需求,這時候,我們可以自己寫一個函式外掛;2.建立maven工程一直next,輸入GroupID,ArtifactId->finsh3.編輯pom.xml建立好maven工程後,引入Jmeter的jar包,注

cordova跨平臺app開發02_定義插件開發與安裝

xtend else callback 視頻 方法名 pty ges ray expect 視頻地址:http://t.cn/RacmXiy cordova的自定義插件由js、原生代碼文件(java、oc)、plugin.xml三部分組成。 cordvoa提供了命令來創

jQuery定義動畫

script star cli color ext2 htm wid div body <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> &l

jquery 定義事件

cti 是否 問題 觸發 jquery mousedown func 類型 自定義 眾所周知類似於mousedown、click、keydown等等這類型的事件都是瀏覽器提供的,通俗叫原生事件,這類型的事件是需要有交互行為才能被觸發。 $(‘#elem‘).on(‘clic

jQuery--定義動畫animate()

class 效果 border lac 回調 回調函數 隱藏 定義 pro 語法結構 animate(params,speed,callback) params:包含一個樣式屬性及值的映射。比如{property1:‘value1‘,property:‘value2‘,..

php微信定義菜單開發

php menu wechat 微信自定義菜單需要有一個微信服務號,在開發之前需要獲取access_token,獲取方法很簡單,登陸微信公眾賬號,進入開發者模式,就可以看到{開發者憑據}:下面AppId和AppSecret,開發者文檔說明 :接口調用請求說明http請求方式: GEThttps:/

你的專屬定制——JQuery定義插件

oct prototype javascrip 3.1.1 [] com 全部 doc tro 前 言 絮叨絮叨   jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript

jQuery 定義方法(擴展方法)

opacity () xtend clas eight bsp back hello 定義 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

jQuery框架-3.jQuery定義封裝插件和第三方插件

method jquery 全局 clas .cn complete spa fff city 一、jQuery的封裝擴展 1、jQuery中extend方法使用 (掛在到jQuery和jQuery.fn兩對象身上的使用) 1.1、官方文檔定義: jQuery.e

openERP筆記 定義模塊開發

oom size 創建工程 for 編號 文檔 姓名 use python ##需求描述 輸入和查詢課程,把信息儲存到課程對象裏 課程包含以下信息:名稱,價格,天數,開始日期,教師,學員 每個課程可以有多個學員,要記錄學員的姓名、電話、電子郵件 課程可以添加教材和作業等