摘要:的編寫并沒有想象中的難,下面通過編寫一個擁有屬性和一些回調函數的簡單插件介紹下如何編寫。
在當前這個前端mv**框架盛行的年代,翻譯這樣一篇關于如何編寫jquery插件的文章好像顯得有點多余和那么的不接時代,不過還是自私點,努力翻譯一把起碼可以提高自己(<_>)。
jquery非常棒,它兼容性好,入門簡單,讓我們在處理終端交互的時候來的輕而易舉,同時他還有非常龐大的插件庫,幾乎你能想到的功能都能找到對應的插件。
但是,我們的業務需求是千變萬化的,萬一我們需要的功能找不到或者說找不到非常合適的插件的時候,我們該怎么辦?或者當項目漸漸龐大起來的時候,你想把通用的功能封裝起來的時候,我們該怎么辦(這個時候請你假裝忘記:amd,cmd,es6module)?按照jquery的思路,這個時候就可以通過自定義插件來解決了。
jquery plugin的編寫并沒有想象中的難,下面通過編寫一個擁有屬性和一些回調函數的簡單插件介紹下如何編寫jquery plugin。
創建文件目錄# 準備基本環境 mkdir jquery-plugin-sample cd jquery-plugin-sample mkdir src cd src echo "" > index.js # 文件結構如下 . ├── LICENSE ├── src │?? └── index.js # 這文件就是用來編寫插件具體內容插件的代碼結構
;(function($){ $.fn.helloWorld = function(){ //Future home of "Hello, World!" } })(jQuery)
上面的代碼干了3件事情
代碼被封裝在一個 (function(){}) self-enclosed 中,這樣保證了內部變量不會和全局環境相互影響
我們將jQuery作為參數傳遞給了內部函數,這樣做的目的是避免和其他庫也聲明了 $相互沖突
我們通過$.fn定義了我們的插件,并且命名為helloWorld
在插件中實線一些功能在編寫功能之前,先基于webpack構建一個本地調試環境 本地環境構建
// src/index.js ;(function($){ $.fn.helloWorld = function(){ this.each(function(){ //1 $(this).text("Hello World")//2 }) } })(jQuery);
上面的代碼需要注意2個地方
1處的this代表就是jqueryDom 對象對象本身,因此不需要 $(this)來進行轉換
2處的this由于遍歷時候的回調中的this指向dom本身,因此需要$(this)轉換為jquery對象
// 測試插件功能 // demo/demo.js import $ from "jquery"; import "../src"; $(document).ready(()=>{ // 找到頁面的dom $(".demo-wrap li").helloWorld(); })
此時,對應的瀏覽器頁面應該會出現如圖一樣的結果,OK,一個非常簡單的插件構建完成,該插件的功能就是將選中的dom的text 替換為Hello World, 這個插件合格嗎?
我們都知道jquery還有一個非常好的特性,就是api支持鏈式調用$("div").text("hell").addClass("red");那么我們自己寫的插件是否滿足這個特性呢?通過測試代碼很明顯,這個helloWorld插件不滿足這個特性,因此不是一個合格的插件,需要稍微處理下才能滿足
// 修改 src/index.js ;(function($){ $.fn.helloWorld = function(){ return this.each(function(){ $(this).text("Hello World") }) } })(jQuery);
OK,到這里為止,一個jquery插件才算真正到完成。
擴展插件,讓插件可以接收參數;(function($){ $.fn.helloWorld = function(customText){ return this.each(function(){ $(this).text(customText) }) } })(jQuery);
OK,現在可以將選中到dom到內容修改為你傳入到任何東西了
終極插件雖然上面我們擴展了插件,可以滿足根據輸入到內容修改匹配到dom的內容,但是如果需要樣式呢?需要修改字體大小呢?需要添加回調函數呢?所以,參數必須是個對象的形式,Ok,立馬修改代碼
;(function($){ $.fn.helloWorld = function(options){ var settings = $.extend({ text:"Hello World", color:null, fontStyle:null, complete:null },options) return this.each(function(){ $(this).text(settings.text); if(settings.color){ $(this).css( "color", settings.color ); } if(settings.fontStyle){ $(this).css( "font-style", settings.fontStyle ); } if ( $.isFunction( settings.complete ) ) { settings.complete.call( this ); } }) } })(jQuery);
// 測試代碼 demo/demo.js import $ from "jquery"; import "../src"; $(document).ready(()=>{ // 找到頁面的dom $(".demo-wrap li").helloWorld({ color:"red", complete:()=>{ console.log("sds") } }).addClass(); })總結
靈活封裝jquery插件,不但可以抽取公用代碼同時可以很好的保證全局環境的干凈。另外,這篇文字雖然是翻譯的文字,不過demo是自己手寫的,有需要的可以去github上下載 jquery-plugin-sample,也可以通過 npm install xxw-jquery-plugin-sample 來測試代碼
本地環境構建cd jquery-plugin-sample npm init -y yarn add webpack webpack-dev-server babel-core babel babel-preset-env html-webpack-plugin babel-loader -D mkdir demo cd demo echo "" > index.ejs echo "" > demo.js # 文件結構如下 . ├── LICENSE ├── demo │?? ├── demo.js │?? └── index.ejs ├── package.json ├── readme.md ├── src │?? └── index.js └── yarn.lock
// 編寫webpack.config.js const path = require("path"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const babel_options ={ presets:[ ["env",{ "targets": { "browsers": ["last 4 versions", "safari >= 7"] } }] ] } module.exports = { entry:"./demo/demo.js", output:{ path:path.resolve(__dirname,"./dist"), filename:"index.js" }, module:{ rules:[ // es6 語法解析 { test:/.js$/, exclude: /(node_modules|bower_components)/, use:[ { loader:"babel-loader", options:babel_options } ] } ] }, plugins:[ new HtmlWebpackPlugin({ template:"./demo/index.ejs", filename:"index.html" }) ], externals: { "jquery": "jQuery" }, devServer: { host: "127.0.0.1", port: 3000 } };
// 編寫ejs,添加jquery cdntest jquery pllugin
# 啟動項目 yarn webpack-dev-server Project is running at http://127.0.0.1:3000/ webpack output is served from / Hash: 137d7a562cabec2c7996 Version: webpack 3.10.0 Time: 1053ms Asset Size Chunks Chunk Names index.js 324 kB 0 [emitted] [big] main index.html 266 bytes [emitted]
在瀏覽器中輸入 http://127.0.0.1:3000/ 訪問測試頁面
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/90618.html
摘要:前端知識點總結什么是第三方的極簡化的操作的函數庫第三方下載極簡化是操作的終極簡化個方面增刪改查事件綁定動畫效果操作學習還是在學,只不過簡化了函數庫中都是函數,用函數來解決一切問題為什么使用操作的終極簡化解決了大部分瀏覽器兼容性問題凡是讓用的 前端知識點總結——JQ 1.什么是jQuery: jQuery: 第三方的極簡化的DOM操作的函數庫 第三方: 下載 極簡化: 是DOM操作的...
摘要:所以要先了解一下插件的三種開發方式通過來擴展通過向添加新的方法通過應用的部件工廠方式創建第三種方法是用來開發更高級的部件的。 jQuery插件開發模式 說到jQuery插件的編寫,起初我把它當做封裝一個方法那樣簡單,這顯然是錯的,因為這讓我一開始完全不知道如何下手去編寫一個插件。所以要先了解一下jQuery插件的三種開發方式: 通過$.extend()來擴展jQuery 通過$.fn...
摘要:示例合并和,修改并返回。例如我們插件里面需要有個方法來檢測用戶調用插件時傳入的參數是否符合規范。私有方法,檢測參數是否合法調用調用調用者覆蓋插件暴露的共公方法調用自定義高亮插件 本文實例講述了jQuery插件編寫步驟。分享給大家供大家參考,具體如下: 如今做web開發,jquery 幾乎是必不可少的,就連vs神器在2010版本開始將Jquery 及ui 內置web項目里了。至于使用jq...
摘要:本教程可能不是最精品的,但一定是最細致的。插件開發下面我們就來看第二種方式的插件開發。然后我們的插件代碼在這個方法里面展開。 要說jQuery 最成功的地方,我認為是它的可擴展性吸引了眾多開發者為其開發插件,從而建立起了一個生態系統。這好比大公司們爭相做平臺一樣,得平臺者得天下。蘋果,微軟,谷歌等巨頭,都有各自的平臺及生態圈。 學會使用jQuery并不難,因為它簡單易學,并且相信你接觸...
jQuery 實現Ajax應用 使用load()方法異步請求數據 使用load()方法通過Ajax請求加載服務器中的數據,并把返回的數據放置到指定的元素中,它的調用格式為: load(url,[data],[callback]) 參數url為加載服務器地址,可選項data參數為請求時發送的數據,callback參數為數據請求成功后,執行的回調函數 使用getJSON()方法異步加載JSON格式數...
閱讀 1269·2021-09-22 15:18
閱讀 2599·2021-09-22 15:17
閱讀 2226·2019-08-30 15:55
閱讀 1573·2019-08-30 15:54
閱讀 1042·2019-08-30 13:12
閱讀 624·2019-08-30 13:12
閱讀 1676·2019-08-29 11:33
閱讀 1438·2019-08-26 17:04