天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

一步一步制作jquery插件Tabs實(shí)現(xiàn)過(guò)程

tabs是現(xiàn)在網(wǎng)頁(yè)應(yīng)用最廣的一種效果,jquery插件和非jquery插件也有不少,有一些朋友問(wèn)我怎么用jquery.ui.tabs的ajax怎么只請(qǐng)求服務(wù)器一次原來(lái)我想其實(shí)很簡(jiǎn)單,看看官方的API就了解,不過(guò)我在回復(fù)這些朋友之前,用firebug查看了官方的ui.tabs發(fā)現(xiàn),聲明了ajax緩存,每點(diǎn)一個(gè)tabs時(shí),仍然會(huì)有服務(wù)器請(qǐng)求這應(yīng)該是服務(wù)器緩存,而不是實(shí)際上我們要求的只ajax一次,不再請(qǐng)求服務(wù)器了接下來(lái)我找了一下其它的tabs插件,基本上沒(méi)有符合要求的,不是太龐大就是太簡(jiǎn)單,太過(guò)龐大的話不如用ui.tabs,文檔和代碼規(guī)范上都是可靠的因此,自制一個(gè)簡(jiǎn)潔的tabs插件還是有必要的在設(shè)計(jì)之前,先整理好思路,實(shí)現(xiàn)tabs,自動(dòng)輪換,ajax等主要功能,然后是dom的排列形式,這里采用傳統(tǒng)的
<div id="tabs">
  <ul>
    <li><a href="#tabs1">tabs1</a></li>
    <li><a href="#tabs2" rel="ajax.htm">tabs2</a></li>
  </ul>
  <div id="tabs1">Hello World!</div>
  <div id="tabs2"></div>
</div>
一個(gè)li對(duì)應(yīng)一個(gè)div的方式,當(dāng)ajax時(shí),添加一個(gè)a的rel屬性,并將內(nèi)容寫入對(duì)應(yīng)的div中,再去掉rel屬性,這樣就只請(qǐng)求服務(wù)器一次,接下來(lái)都是div已經(jīng)寫入的內(nèi)容了
我這里沒(méi)有使用cookie,可以結(jié)合jquery.cookie插件,這樣即使用戶關(guān)閉網(wǎng)頁(yè)下次再打開,也不用請(qǐng)求服務(wù)器
一,首先寫個(gè)jquery插件的閉包,園子里這兩天有個(gè)朋友寫了Javascript的閉包概念,挺好的,有興趣的朋友去看看
復(fù)制代碼 代碼如下:
(function ($) {
//code here
})(jQuery);

二,插件命名,這里命名為aTabs,這樣綁定的時(shí)候可以用$(...).aTabs(),本人英文名Allen,所以用a字頭命名了~
復(fù)制代碼 代碼如下:
$.fn.aTabs = function (options) {
//api
//main function
}

三,把想好的功能寫成API,供外部修改
復(fù)制代碼 代碼如下:
$.fn.aTabs.defaults = {
firstOn: 0,
className: 'selected',
eventName: 'all', //click,mouserover,all
loadName: '加載中...', //ajax等待字符串
fadeIn: 'normal',
autoFade: false,
autoFadeTime: 3
};
var opts = $.extend({}, $.fn.aTabs.defaults, options); //這里可以將外部輸入的代替掉默認(rèn)的值,$.extend作用詳見(jiàn) <A >http://api.jquery.com/jQuery.extend/</A>,看不懂英文的直接看其中的例子就行

四,編寫主體功能,說(shuō)明在代碼中看注釋
復(fù)制代碼 代碼如下:
return this.each(function () { //這里為每個(gè)綁定dom插件
var target = $(this);
var div = target.children().not("ul,span"); //所有的tabs顯示體div
var tabs = target.find('ul:eq(0) li'); //所有的tabs頭部索引
function Tabs() {
if ($(this).hasClass(opts.className)) {
return false;
}
tabsShow(div, $(this));
return false;
}
function tabsShow(div, li, index) {
div.stop(true, true).hide();
//自動(dòng)輪換用
if (typeof (index) == "number") {
if (li.find("a").attr("rel")) ajax(div, li);
$(div[index]).stop(true,true).fadeIn(opts.fadeIn);
tabs.stop(true, true).removeClass(opts.className);
$(tabs[index]).stop(true, true).addClass(opts.className);
}
//非自動(dòng)輪換
else {
var tabBody = div.filter(li.find("a").attr("href"));
if (li.find("a").attr("rel")) ajax(div, li);
tabBody.stop(true,true).fadeIn(opts.fadeIn);
tabs.stop(true, true).removeClass(opts.className);
li.stop(true, true).addClass(opts.className);
}
}
function ajax(div, li) {  //這里是關(guān)鍵ajax,通過(guò)操作rel的方式實(shí)現(xiàn)只請(qǐng)求服務(wù)器一次
var href = li.find("a").attr("href");
var rel = li.find("a").attr("rel"); //ajax請(qǐng)求url
var i = div.filter(href); //當(dāng)前div
if (rel) { //如果ajax請(qǐng)求url不為空,只ajax一次
i.html(opts.loadName);
$.ajax({
url: rel,
cache: false,
success: function (html) {
i.html(html);
},
error: function () {
i.html('加載錯(cuò)誤,請(qǐng)重試!');
}
});
li.find("a").removeAttr("rel"); //只ajax一次
}
}
if (opts.autoFade) {
var index = opts.firstOn + 1;
setInterval(function () {
if (index >= div.length) {
index = 0;
}
tabsShow(div, $(this), index++);
}, opts.autoFadeTime * 1000);
}
tabs.bind(opts.eventName == 'all' ? 'click mouseover' : opts.eventName, Tabs) //綁定事件
.filter(':first').trigger(opts.eventName == 'all' ? 'click' : opts.eventName); //自動(dòng)觸發(fā)事件
});

最后,將以上整合,tabs插件就誕生了,下面是全部源碼:
復(fù)制代碼 代碼如下:
/*
* 作者:黑曜石
*/
(function ($) {
$.fn.aTabs = function (options) {
$.fn.aTabs.defaults = {
firstOn: 0,
className: 'selected',
eventName: 'all', //click,mouserover,all
loadName: '加載中...', //ajax等待字符串
fadeIn: 'normal',
autoFade: false,
autoFadeTime: 3
};
var opts = $.extend({}, $.fn.aTabs.defaults, options);
return this.each(function () {
var target = $(this);
var div = target.children().not("ul,span"); //所有的tabs顯示體div
var tabs = target.find('ul:eq(0) li'); //所有的tabs頭部索引
function Tabs() {
if ($(this).hasClass(opts.className)) {
return false;
}
tabsShow(div, $(this));
return false;
}
function tabsShow(div, li, index) {
div.stop(true, true).hide();
//自動(dòng)輪換用
if (typeof (index) == "number") {
if (li.find("a").attr("rel")) ajax(div, li);
$(div[index]).stop(true,true).fadeIn(opts.fadeIn);
tabs.stop(true, true).removeClass(opts.className);
$(tabs[index]).stop(true, true).addClass(opts.className);
}
//非自動(dòng)輪換
else {
var tabBody = div.filter(li.find("a").attr("href"));
if (li.find("a").attr("rel")) ajax(div, li);
tabBody.stop(true,true).fadeIn(opts.fadeIn);
tabs.stop(true, true).removeClass(opts.className);
li.stop(true, true).addClass(opts.className);
}
}
function ajax(div, li) {
var href = li.find("a").attr("href");
var rel = li.find("a").attr("rel"); //ajax請(qǐng)求url
var i = div.filter(href); //當(dāng)前div
if (rel) { //如果ajax請(qǐng)求url不為空,只ajax一次
i.html(opts.loadName);
$.ajax({
url: rel,
cache: false,
success: function (html) {
i.html(html);
},
error: function () {
i.html('加載錯(cuò)誤,請(qǐng)重試!');
}
});
li.find("a").removeAttr("rel"); //只ajax一次
}
}
if (opts.autoFade) {
var index = opts.firstOn + 1;
setInterval(function () {
if (index >= div.length) {
index = 0;
}
tabsShow(div, $(this), index++);
}, opts.autoFadeTime * 1000);
}
tabs.bind(opts.eventName == 'all' ? 'click mouseover' : opts.eventName, Tabs) //綁定事件
.filter(':first').trigger(opts.eventName == 'all' ? 'click' : opts.eventName); //自動(dòng)觸發(fā)事件
});
};
})(jQuery);

JavaScript技術(shù)一步一步制作jquery插件Tabs實(shí)現(xiàn)過(guò)程,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久爱精品亚洲电影午夜 | 日韩亚洲欧美中文高清在线 | 伊人综合在线22 | 免费一级特黄欧美大片久久网 | 高傲教师麻麻被同学调教123 | chinese极品嫩模videos | 全免费午夜一级毛片 | 一本道高清无码v | a视频免费看 | 视频一区国产在线第一页 | 亚洲精品久久久一区 | 跪趴式啪啪GIF动态图27报 | 国产主播福利一区二区 | 新新电影理论中文字幕 | 无码AV精品一区二区三区 | 久久九九有精品国产23百花影院 | 亲胸揉胸膜下刺激视频在线观看 | 国产乱子影视频上线免费观看 | 92国产精品午夜免费福利视频 | 亚洲精品九色在线网站 | 他揉捏她两乳不停呻吟口述 | 乐乐亚洲精品综合影院 | 蜜柚免费视频高清观看在线 | 成人AV无码一二二区视频免费看 | 巨胸美女狂喷奶水www网麻豆 | 最近免费中文字幕MV免费高清 | 国产成人免费不卡在线观看 | 男女久久久国产一区二区三区 | GAY空少被体育生开菊 | 亚洲嫩草AV永久无码精品无码 | 新影音先锋男人色资源网 | 国产精品青青草原app大全 | 好吊妞在线成人免费 | 免费毛片视频网站 | 玩弄放荡人妻一区二区三区 | 欧美亚洲日韩欧洲不卡 | 在线观看免费视频播放视频 | 国产偷窥盗摄一区二区 | 一本道在线综合久久88 | 久久毛片网站 | 香蕉久久一区二区三区啪啪 |