jQuery自定義導航外掛的開發過程
前言
在開發過程中,我們經常會使用到外掛,其具有方便靈活的特點,但是如果在市面上找不到自己滿意的外掛,或者想自己封裝一個外掛提供給別人使用時,就需要自己編寫一個jQuery外掛了。
按照功能來分類,外掛可以分為以下三類:
1.封裝物件方法的外掛(就是基於DOM元素的jQuery物件,具有區域性性)
2.封裝全域性函式的外掛(全域性性的封裝)
3.選擇器外掛(類似於.find())
經過這麼長時間的外掛開發,開發者們逐步約定了一些規則,以解決各種因為外掛導致的錯誤和衝突,包括下面的規則:
- 外掛名推薦使用jquery.[外掛名].js,以免和其他js檔案或者其他庫相沖突;
- 區域性物件附加到jquery.fn物件上,全域性函式附加在jquery上;
- 外掛內部,this指向當前的區域性物件;
- 可以通過this.each來遍歷所有元素;
- 所有的方法或外掛都必須用分號結尾,避免出現問題;
- 外掛應該返回的是jquery物件,以保證可鏈式連綴;
- 避免外掛內部使用$,如果一定要使用,請傳遞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 ##需求描述 輸入和查詢課程,把信息儲存到課程對象裏 課程包含以下信息:名稱,價格,天數,開始日期,教師,學員 每個課程可以有多個學員,要記錄學員的姓名、電話、電子郵件 課程可以添加教材和作業等