jQuery插件開發初步練習

看了下,前面的bootstrap的carousel.js源碼分析好像還沒有補充完整,現在想想算了。每月計劃還是要做的,carousel.js(輪播)雖然沒說完,但我知道自己底細,對bootstrap插件源碼不夠了解,對jQuery插件缺乏必要認知。所以5月計劃便是搗鼓jQuery插件開發,然後進一步完成對bootstrap框架的探索以及利用,對待知識就是要挖掘他的閃光點,學會它。

bootstrap擁有相當大的侷限性,說真的。兩個月過去,從一頭霧水到能夠使用API,使用基礎less,移動端佈局等等,都是依靠bootstrap來學會,不得不說這是個好框架!你想想看,我從移動端開始搜索百度,谷歌,然後到rem,然後得到bootstrap,然後慢慢會使用,然後慢慢發現bootstrap主題樣式什麼的都是固定好的,而且還是西方那一套扁平化,很多外包公司壓根不會採用這個樣式。可能或許大概後臺會用,但這就是問題,一股腦引用bootstrap.min.css就是最大錯誤!

不徹底的css重置(可能是我個人項目經驗不夠),大量代碼覆蓋,你想要重新定義樣式,你會發現你想要寫更多樣式!

如果引用bootstrap.min.js感覺好雞肋,食之無味棄之可惜的趕腳!它裏面的輪播,導航欄,模態框等等!當真應了網友評論的那樣,bootstrap設計初衷就不是給前端工程師用的,給那些需要模板的人用的,拿來就用!之前分析過它的幾個獨立插件,全是一個套路,功能單一,動態效果單一,而且還把js調用那一塊直接封裝好,連js調用代碼都不用。有木有很坑的,是的,太多的坑!

不過我還是從中得到很多知識,處於對jQuery插件開發的欠缺,加緊練習jQuery插件的封裝。目的依舊,徹底搞懂bootstrap框架,想着中高級web前端邁進。


從網絡上搜索得到,jQuery插件開發有三種方式:

  1. 通過$.extend()來擴展jQuery
  2. 通過$.fn 向jQuery添加新的方法
  3. 通過$.widget()應用jQuery UI的部件工廠方式創建
但有個前提,jQuery的傳參,既然是jQuery插件就得使用jQuery是不?來來來,給它加個殼!

(function ($) {
    //你自己的插件代碼
})(jQuery);

簡單說下三種方法的區別:

第一種僅僅是在jQuery命名空間或者理解成jQuery身上添加了一個靜態方法而以。所以我們調用通過$.extend()添加的函數時直接通過$符號調用($.myfunction())而不需要選中DOM元素($('#example').myfunction())。是的,你不能使用jQuery選擇器,當然很多人說不是引用的jQuery嗎?那個不是同個意思,自己百度去。

第二種利用jQuery強大的選擇器帶來的便利,要處理DOM元素以及將插件更好地運用於所選擇的元素身上,還是需要使用第二種開發方式。你所見到或使用的插件也大多是通過此種方式開發。

第三種方式是用來開發更高級jQuery部件的,該模式開發出來的部件帶有很多jQuery內建的特性,比如插件的狀態信息自動保存,各種關於插件的常用方法等,非常貼心,這裏不細說。

+function($){
	$.extend({
		sayhello:function(){
			console.log('hello word!');
		}
	});

}(jQuery);

第一種因爲是擴展jQuery的靜態類$上,所以使用時候

$.sayhello();
第二種方式,通過增加擴展jQuery原型,$.fn指代的是jQuery的原型鏈。
(function ($) {
    $.fn.myPlugin = function () {
        //你自己的插件代碼
    };
})(jQuery);
第二種方式涉及到javascript的this指代問題,在JavaScript中,this是當前執行函數的上下文。在jQuery插件中,他指代的就是jQuery對象本身。但這裏特別說名,如果有回調函數,那這時候的this則表示DOM元素

(function ($) {
    $.fn.myPlugin = function () {

        //此處沒有必要將this包在$號中如$(this),因爲this已經是一個jQuery對象。
        //$(this)等同於 $($('#element'));

        this.fadeIn('normal', function () {

            //此處callback函數中this關鍵字代表一個DOM元素

        });

    };
})(jQuery);

$('#element').myPlugin();

上面內容從jQuery中文網上得到,是不是有點理解了。插件中,this就代表jQuery,你可以this.show()等等jQuery內置API,但就像上面例子那樣,如果包含回調函數callback,那麼this就會發生變化,指代原生DOM元素

$.widget( "custom.superDialog", {} );
上面是通過部件庫(Widget Factory)創建小部件是通過向 $.widget() 傳遞小部件名稱和一個原型對象來完成的。下面的實例是在 "custom" 命名空間中創建一個 "superDialog" 小部件。

好了,以上是簡單的jQuery開發方式,接下來一個月估計都要琢磨jQuery插件開發,然後再回過頭來對bootstrap的js插件進行全面的研究。加油!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章