看了下,前面的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插件開發有三種方式:
- 通過$.extend()來擴展jQuery
- 通過$.fn 向jQuery添加新的方法
- 通過$.widget()應用jQuery UI的部件工廠方式創建
(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插件進行全面的研究。加油!