今天,先從最簡單的開始,將已有的一個Tab選項卡切換功能改寫成javascript插件形式。
原生函數寫法
將一個javascript方法改寫為js插件最簡單的方式就是將這個方法掛載到window全局對象下面
我們先來看看最原始的使用函數寫法的代碼:
tab.html
<!DOCTYPE html><html><head lang="en"><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><meta name="renderer" content="webkit"><title>jquery_hjb_tab插件demo</title><link rel="stylesheet" href="h.css"/></head><body><div id="tab"><div class="tabs"><ul><li><a href="#">tab1</a></li><li><a href="#">tab2</a></li><li><a href="#">tab3</a></li><li><a href="#">tab4</a></li></ul></div><div class="tabCons"><section>內容一</section><section>內容二</section><section>內容三</section><section>內容四</section></div></div><script>window.onload = h_tab('tab');function h_tab(tabId){var oLinks = document.getElementById(tabId).getElementsByTagName("a");var oCons = document.getElementById(tabId).getElementsByTagName("section");for(var i = 0; i<oLinks.length; i++){oLinks[i].index = i;oLinks[i].onclick = function () {for(var j =0; j<oLinks.length; j++){oLinks[j].className="";oCons[j].style.display = "none";}this.className="cur";oCons[this.index].style.display ="block";}}}</script>h.css
@charset "utf-8";/*//author:hjb2722404//description://date:2016/2/18*/.tabs ul { width: 100%; list-style-type: none;}.tabs ul li { width: 48%; display: inline-block; margin: 0; padding: 0;}.tabs ul li a {border-bottom: 3px solid #cccccc; width: 100%; height: 100%; display: block; text-align: center; min-height: 40px; line-height: 40px; text-decoration: none; font-family: "微軟雅黑"; color: #a94442}.tabs ul li a.cur { border-bottom: 3px solid #f26123;}.tabCons section { display: none;}.tabCons section:nth-child(1) { display: block;}上面兩份代碼為基本代碼,之后我們后一步步在這份代碼的基礎上進行改進。
原生插件寫法
好,現在,我們就來將這個方法改寫成掛載在window對象下的插件:
tab.html
……// 下面是第一次改動<script type="text/javascript" src="h_tabs.js"></script><script>H_tab("tab");</script></body></html>h_tabs.js
window.H_tab = function(tabId){var oLinks = document.getElementById(tabId).getElementsByTagName("a");var oCons = document.getElementById(tabId).getElementsByTagName("section");for(var i = 0; i<oLinks.length; i++){oLinks[i].index = i;oLinks[i].onclick = function () {for(var j =0; j<oLinks.length; j++){oLinks[j].className="";oCons[j].style.display = "none";}this.className="cur";oCons[this.index].style.display ="block";}}};但是,我們發現這樣的寫法雖然很簡單,但也有問題:window作為一個全局對象,如果我們把自己的方法都掛載到它下面作為插件使用的話,插件一多,就容易產生命名空間沖突,另一方面,使用原生js雖然可以減少對外部的依賴,但代碼量相對還是很大,寫法比較繁瑣。
jquery寫法
我們嘗試引入jquery庫,將此插件改寫為jquery插件。
jquery插件有三種形式:類級別的形式,對象級別的形式,jquery UI組件的形式
jquery 類級別插件寫法 主站蜘蛛池模板: 托克托县| 呼和浩特市| 山东| 元江| 中山市| 涟水县| 丁青县| 阆中市| 商洛市| 阿拉善盟| 阳信县| 瑞金市| 鸡泽县| 沙雅县| 措美县| 安顺市| 昭苏县| 玉屏| 康定县| 玛纳斯县| 赤峰市| 东丰县| 安阳市| 巨鹿县| 奇台县| 灵川县| 榆林市| 昌图县| 馆陶县| 鲁甸县| 贵南县| 吉木萨尔县| 论坛| 偃师市| 洱源县| 龙泉市| 乌鲁木齐县| 那曲县| 灵璧县| 兖州市| 都安|