jQuery自己編寫插件()

来源:http://www.cnblogs.com/cyfm/archive/2016/08/08/5747900.html
-Advertisement-
Play Games

引言: 在項目中不同頁面經常要用到已經寫好的交互,比如彈窗,比如下拉菜單,比如選項卡,比如刪除... 此時如果每次都把代碼copy一份無疑是一件比較麻煩並且無趣的事情,而且個人認為有些low了,我們可是要追尋 高大上的90後有為青年呢~可是該如何高大上呢?這時jQuery自定義插件開發來了,第一次聽 ...


引言:

  在項目中不同頁面經常要用到已經寫好的交互,比如彈窗,比如下拉菜單,比如選項卡,比如刪除...

此時如果每次都把代碼copy一份無疑是一件比較麻煩並且無趣的事情,而且個人認為有些low了,我們可是要追尋

高大上的90後有為青年呢~可是該如何高大上呢?這時jQuery自定義插件開發來了,第一次聽到插件開發覺得如此happy,

遂動手網上查找資料進行學習,如下,我用自己的語言將插件開發的程式步驟寫出來,如有錯誤,歡迎指正。

 

1:jQuery插件開發分為類級別開發對象級別開發,因為類級別開發在真實項目中幾乎不用,下麵只對象級別進行探究。

 

a , 首先準備好一個架子,如下:

;$(function($){

})(jQuery);

b, 這個架子是你編寫插件代碼要寫入的空間,下麵簡單解釋一下這個架子:

1)在jQuery環境下封裝自己的插件,首先為避免與其他庫的衝突,需要在插件的後面傳一個jQuery參數進去,對應的函數裡面的參數寫入$

2)未避免出現問題,需在插件的前後加入分號(分號的增加並不會影響程式的運行)

 

2:再上一個架子

 

;(function($){
    $.fn.tab = function(options){
        
        var defaults = {
            //各種參數,各種屬性
        }


        var options = $.extend(defaults,options);

        this.each(function(){
            
            //各種功能
        });

        return this;
    }



})(jQuery);

這個架子是個什麼東西呢?原來他是jQuery官方提供的一個標準化的開發模式,這裡簡單地介紹一下,不作詳要說明,細節有興趣的童鞋可以自己百度一下。

$.fn.tab  這個tab是你這個功能插件的名字,可任意改變名字,你自己知道就好了。

 

var options = $.extend(defaults,options);  這個是利用extend方法把 defaults對象的方法屬性全部整合到 options里,

也就是options繼承了defaults對象的方法以及屬性。這個defaults和options名字是可以隨意更改的,只要是滿足js的命名規範。

 

this.each(function(){});就不介紹了,下麵會通過一個實例表現它,這裡你只需要知道他是實現功能代碼的地方就可以啦~

至於return this; 就留到實例結束後面再說,這樣做肯定是有原因的啦,別心急~

 

3:心細的girls or boys 肯定知道這個實例是什麼啦,沒錯,是tab選項卡~

下麵以tab選項卡的方式來explore這個插件的編寫。

 

a: 先備好html,

<div class="tab">

  <ul class="tab_nav">
    <li class="current">html</li>
    <li>css</li>
    <li>js</li>
  </ul>

  <div class="tab_content">
    <div style="display:block;">html</div>
    <div>css</div>
    <div>js</div>
  </div>
</div>

b,頁面是這樣的:

 

c,ok,頁面已經準備就緒,現在可以來寫插件了,先上代碼

;(function($){
    $.fn.tab = function(options){
        
        var defaults = {
            //各種參數,各種屬性
        }


        var options = $.extend(defaults,options);

        this.each(function(){
            
            //各種功能  //可以理解成功能代碼
            var _this = $(this);
            _this.find('.tab_nav>li').click(function(){
                $(this).addClass('current').siblings().removeClass('current');

                var index = $(this).index();
                _this.find('.tab_content>div').eq(index).show().siblings().hide();

            });


        });

        return this;
    }



})(jQuery);

 

d,這個時候只需要看this.each下的功能代碼,學過jQuery的同學都知道代碼實現,這裡主要就調用插件和配置參數這一塊來進行探究。

 

4,在html代碼里我們只需要:

<script>
        $(function(){
            $('.tab').tab();
        });
</script>

a,找到外部容器,並調用你所寫的tab方法(就是你所寫的插件名字):

$.fn.tab = function(options){}

 

b,敏感的童鞋肯定發現了功能代碼裡面的class元素以及事件是被寫死的,要是我們在另外一個頁面寫的class和事件需求和這個插件的不同,

除了改插件源碼之外這個插件就沒法用用了,作為可擴展性的插件我們怎麼可以把它寫死呢?嗯哼?當然不可以啦~

 

好,就讓我們一起來解決它吧:

1)請看下圖:

 

2) 沒錯,就在這裡配置它,我們可以看到哪些東西被寫死了呢?下圖:

3) 現在我們可以在default對象裡面繪畫你的小空間啦~見下圖:

 

3)有的同學可能會疑惑為什麼用options調用呢?其實上面已經說過啦,因為extends將default對象的屬性以及方法都整合到了options里。

這時候只需要用options調用就可以了。

4)同樣的如果需求是把click事件改為mouseover事件,此時我們需要用到on() or bind() ,這樣就方便我們改事件參數啦,如下:

_this.find(options.tabNav).on('click',function(){}

此時只要在default里寫入相應的代碼

eventType:'click'

而後同樣的變化

_this.find(options.tabNav).on(options.eventType,function(){}

5)此時因為需求是mouseover,這是就不需要改插件源碼啦,直接在html里的js代碼(or你自己的js總文件里)進行相應的變化就ok啦,如下:

1 2 3 4 5 6 7 8 9 <script>         $(function(){             $('.tab').tab({                 currentClass:'current123',                 eventType:'mouseover'                                 .....             });         }); </script>

*此時在這裡更改class和事件就很方便啦,溫馨提示,class改變雖好,可別忘了改對應的css樣式名字哦,要成雙成配呢~

 

好了,到這裡基本上就要結束啦,哦,對了,return this;還沒說呢,寶寶是不會忘記的~

5:jQuery最強大的特性之一莫過於鏈式操作啦,此時如果你在$('.tab').tab()後面追加操作,你會發現無法實現,如下:

$('.tab').tab().find('.tab_nav>li').css('background','red');

但是當你return this把對象返回出去的時候你會發現又重新實現了~

 

 

一轉眼就5點了,好睏吶,睡覺去啦=_=,思密達


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 還記得剛學ADO.NET的情景麽?還記得當年是怎麼從ADO.NET被忽悠到用SqlHelper的麽?話說從入門到走上工作崗位那些年,我們就一直被純純地教導或引導,ADO.NET太原始,得封裝成SqlHelper或DBHelper......後來,這種思維一直深深就存在腦海裡,並不知不覺中進入了潛意識... ...
  • 線上預覽 源碼下載 lightgallery.js是一款純JavaScript輕量級響應式lightbox插件。該Lightbox插件支持圖片,視頻,iframe等多種媒體。支持全屏,導航,縮放,下載等功能,還支持多種動畫過渡效果。lightgallery.js的特點還有: 完全響應式設計。 內置插 ...
  • 記得一年前,到一家公司面試的時候,問我position有哪幾個屬性,我憋半天才回答出2個,大家估計都清楚,就是我們經常用到的2個(relative,absolute)。 最近又用到了好多,深入研究了下。 一、語法: position:static | relative | absolute | fi ...
  • html代碼: <div class="div"></div> css代碼: .div{ border-top:40px solid #ff0077; border-left:40px solid #004444; border-bottom:40px solid #999999; border-r ...
  • 安裝Gulp.js Gulp是給予Node.js的,故首先安裝Node.js[1],完成之後執行下麵的命令安裝Gulp: npm install -g gulp //-g (global)執行全局安裝gulp,這樣在任何地方都可以進行 gulp 操作 安裝完成之後,需要在我們的項目中使用,需要命令行 ...
  • var obj1={apple:0,banana:{weight:52,price:100},cherry:97}; $.exytend(obj1); $.cherry >97 $.apple >0 $.banana >{weight:52,price:100} var obj2={banana:{ ...
  • animation-fill-mode是css3動畫的一個屬性,它能夠控制元素在動畫執行前與動畫完成後的樣式。一個帶有延遲,並且按正常方向執行的動畫(正常方向是指從0%運行到100%),執行一次的過程可以描述如下: 按照動畫的執行時間來劃分,一次動畫過程可以將元素劃分為3個狀態:動畫等待,動畫進行和... ...
  • Covering-Bad 是一個可拉動大小的元素,覆蓋在原有的元素上面,從而兩者進行對比。 線上實例 實例演示1 實例演示2 使用方法 複製 參數詳解 下載 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...