bootstrap選項(xiàng)卡擴(kuò)展功能詳解
用了下bootstrap,雖然好看,但是控件跟之前用的easyui相差很大,功能太少,不得不自己寫。
花了幾個(gè)小時(shí)把tabs控件擴(kuò)展了下。下面是代碼
頁面代碼:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link href="Content/bootstrap.css" rel="external nofollow" rel="stylesheet" />
<script src="Scripts/jquery-1.10.2.js"></script>
<script src="Scripts/bootstrap.js"></script>
<style type="text/css">
.pagetabs{height:41px;}
.nav-tabs > li{padding: 0 1px;}
.nav-tabs > li > a{color: #555;padding:8px 25px 8px 15px;border-top:4px solid transparent;background-color:#eee;border:1px solid #ddd;border-bottom-color:transparent;}
.nav-tabs > li > a > .close{display:inline-block;float:inherit;position: absolute;top: 1px;font-size: 18px;font-weight: inherit;right: 5px;}
.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus{border-top: 4px solid #ffa405;}
.nav-tabs > li > a:hover{background-color:#e3e3e3;border:1px solid #ddd;border-bottom-color:transparent;}
.pagetabs .dropdown-toggle,.pagetabs .dropdown-toggle:hover{border:none;background-color:transparent;padding:8px;}
</style>
</head>
<body>
<div id="tabtest" style="width:600px;"></div>
</body>
</html>
<script>
$(function () {
var toolbar = $('<div class="btn-group"></div>');
$("#tabtest").before(toolbar);
Tabs.init({ selector: $("#tabtest"), close: true });
for (var i = 1; i <= 40; i++) {
(function (i) {
toolbar.append($('<button type="button" class="btn btn-default">' + i + '</button>').click(function () {
Tabs.addtab({ title: "測試" + i, bindcode: i, content: i + " " + lwFW.dateHelper.toString(new Date(), "yyyy-MM-dd HH:mm:ss") });
//Tabs.addtab({ title: "測試" + i, bindcode: i, url: "http://www.baidu.com" });
}));
})(i);
};
});
</script>
控件代碼:
//選項(xiàng)卡
var Tabs = (function ($) {
var options = {
selector: undefined,//
close: false,//是否可以關(guān)閉標(biāo)簽
//contextmenu: false,//右鍵菜單
closeCallback: function () { }
};
var _newtab;
var _tabcontent;
var _drop;
var tab = function () {
this.options = {
title: "",
bindcode: undefined,
url: undefined,
close: false
};
var isfull = false;
this.init = function (setting) {
$.extend(this.options, setting);
};
this.addtab = function (setting) {
$.extend(this.options, setting);
var li, litop, hasdata;
if (!_drop) {
_drop = new droplist();
};
hasdata = ishas(this.options);
if (!hasdata.has) {
li = $('<li><a href="#page' + this.options.bindcode + '" rel="external nofollow" data-toggle="tab">' + this.options.title + '<span class="close">×</span></a></li>');
li.data("data", $.extend(true, {}, this.options));
} else {
li = hasdata.selector.off("click");
};
li.prependTo(options.selector);
li.find("span.close").show().on("click", function () {
closetab(this);
});
options.selector.children("li").not(li).removeClass("active");
li.addClass("active");
litop = _drop.options.selector.position().top, paneltop = options.selector.position().top;
if (litop > paneltop) { //超出檢測
_drop.addDropItem();
};
};
function closetab(target) {
var pager = $(target).parent().attr("href");
$(target).closest("li").remove();
options.selector.next().find(pager).remove();
if (options.selector.find("li.active").length <= 0) {
options.selector.find("li>a:first").tab("show");
};
var li = _drop.options.ulpanel.children("li:first");
if (li.length <= 0) return;
li.find("span.close").show();
_drop.options.selector.before(li);
if (_drop.options.selector.position().top > options.selector.position().top) {
li.find("span.close").hide();
_drop.options.ulpanel.append(li);
return;
};
li.off("click");
if (_drop.options.ulpanel.children("li").length <= 0) {
_drop.options.selector.css({ "visibility": "hidden" });
};
};
function ishas(setting) {//檢測選項(xiàng)卡是否存在
var lis = options.selector.find("li"), lidata, hasdata;
hasdata = { selector: undefined, has: false };
$.each(lis, function () {
lidata = $(this).data("data");
if (!lidata) return true;
if (lidata.title === setting.title && lidata.bindcode === setting.bindcode && lidata.url === setting.url) {
hasdata = { selector: $(this), has: true };
return false;
};
});
return hasdata;
};
};
var tabcontent = function () {
this.options = {
selector:undefined
};
var option = {
bindcode: undefined,
url: undefined,
content:undefined
};
this.init = function () {
var content = $('<div class="tab-content"></div>');
this.options.selector = content;
options.selector.after(this.options.selector);
};
this.addContent = function (setting) {
var page,iframe;
$.extend(option, setting);
hasdata = ishas(option);
if (!hasdata.has) {
page = $('<div id="page' + option.bindcode + '" class="tab-pane"></div>').data("data", $.extend(true, {}, option));
if (!option.url) {
page.html(option.content);
} else {
iframe = $('<iframe src="' + option.url + '" onload="lwFW.windowHelper.autoiframe(this)" scrolling="no"></iframe>');
page.append(iframe);
};
page.appendTo(this.options.selector);
} else {
page = hasdata.selector;
};
this.options.selector.children("div").not(page).removeClass("active");
page.addClass("active");
};
function ishas(setting) {//檢測選項(xiàng)卡是否存在
var divs = _tabcontent.options.selector.children("div"), divdata, hasdata;
hasdata = { selector: undefined, has: false };
$.each(divs, function () {
divdata = $(this).data("data");
if (!divdata) return true;
if (divdata.bindcode === setting.bindcode) {
hasdata = { selector: $(this), has: true };
return false;
};
});
return hasdata;
};
};
var droplist = function () {
this.options = {
selector: undefined,
ulpanel: undefined
};
this.init = function (panel) {
var li = $('<li class="dropdown pull-right"><a class="dropdown-toggle" data-toggle="dropdown" href="#" rel="external nofollow" ><b class="caret"></b></a><ul class="dropdown-menu"></ul></li>');
this.options.selector = li.css({ "visibility": "hidden" });
this.options.ulpanel = li.children("ul");
this.options.selector.appendTo(panel);
};
this.addDropItem = function () {
additem(this.options.selector, this.options.ulpanel);
};
function additem(li, ul) {
var item = options.selector.children("li").not(li).last();
li.css({ "visibility": "visible" });
if (item.length <= 0) return;
item.find("span.close").hide();
ul.append(item);
item.one("click", function () {
itemtarget(this, li, ul);
});
};
function itemtarget(target, selector, ulpanel) {
var item = options.selector.children("li").not(selector).last();
$(target).find("span.close").show();
$(target).prependTo(options.selector);
if (item.length <= 0) return;
if (selector.position().top > options.selector.position().top) {
item.find("span.close").hide();
ulpanel.append(item);
};
item.one("click", function () {
itemtarget(this, selector, ulpanel);
});
};
};
function init(setting) {
$.extend(options, setting);
if (!options.selector) {
return;
};
if (options.selector[0].tagName.toLowerCase() != "ul") {
var selector = $('<ul class="nav nav-tabs pagetabs"></ul>').appendTo(options.selector);
options.selector = selector;
};
if (!_drop) {
_drop = new droplist();
};
_drop.init(options.selector);
if (!_tabcontent) {
_tabcontent = new tabcontent();
};
_tabcontent.init();
if (!_newtab) {
_newtab = new tab();
};
};
function addtab(setting) {
if (!_newtab) {
_newtab = new tab();
};
_newtab.addtab(setting);
if (!_tabcontent) {
_tabcontent = new tabcontent();
};
_tabcontent.addContent(setting);
options.selector.find('li>a').filter('[href=#page' + setting.bindcode + ']').tab("show");
};
return {
init: function (setting) {
init(setting);
}, addtab: function (setting) {
addtab(setting);
}
};
})(jQuery);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 全面解析Bootstrap中tab(選項(xiàng)卡)的使用方法
- BootStrap tab選項(xiàng)卡使用小結(jié)
- bootstrap選項(xiàng)卡使用方法解析
- bootstrap實(shí)現(xiàn)tab選項(xiàng)卡切換
- 簡單實(shí)現(xiàn)bootstrap選項(xiàng)卡效果
- bootstrap導(dǎo)航、選項(xiàng)卡實(shí)現(xiàn)代碼
- Bootstrap選項(xiàng)卡與Masonry插件的完美結(jié)合
- Bootstrap選項(xiàng)卡學(xué)習(xí)筆記分享
- 淺談bootstrap源碼分析之tab(選項(xiàng)卡)
- BootstrapVue選項(xiàng)卡標(biāo)題增加關(guān)閉按鈕的方法
相關(guān)文章
微信小程序使用webview打開pdf文檔以及顯示網(wǎng)頁內(nèi)容的方法步驟
在線查看PDF文件,已經(jīng)是很常見的需求了,下面這篇文章主要給大家介紹了關(guān)于微信小程序使用webview打開pdf文檔以及顯示網(wǎng)頁內(nèi)容的方法步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
javascript 解析后的xml對象的讀取方法細(xì)解
2009-07-07
原生JavaScript實(shí)現(xiàn)貪吃蛇游戲
這篇文章主要為大家詳細(xì)介紹了原生JavaScript實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
JS使用Promise時(shí)常見的5個(gè)錯(cuò)誤總結(jié)
Promise?提供了一種優(yōu)雅的方法來處理?JS?中的異步操作。這也是避免“回調(diào)地獄”的解決方案。然而,并沒有多少開發(fā)人員了解其中的內(nèi)容。因此,許多人在實(shí)踐中往往會(huì)犯錯(cuò)誤。在本文中,介紹一下使用?promise?時(shí)的五個(gè)常見錯(cuò)誤,希望大家能夠避免2022-11-11
eslint+prettier統(tǒng)一代碼風(fēng)格的實(shí)現(xiàn)方法
這篇文章主要介紹了eslint+prettier 統(tǒng)一代碼風(fēng)格的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
js中將時(shí)間戳轉(zhuǎn)化成YYYY-MM-DD?HH:mm:ss的3種實(shí)現(xiàn)辦法
最近開發(fā)中需要和后端進(jìn)日期和時(shí)間傳值,前后端約定為時(shí)間戳的格式,但是前端展示需要展示成年-月-日的格式,就需要進(jìn)行日期和時(shí)間轉(zhuǎn)換格式,這篇文章主要給大家介紹了關(guān)于js中將時(shí)間戳轉(zhuǎn)化成YYYY-MM-DD?HH:mm:ss的3種實(shí)現(xiàn)辦法,需要的朋友可以參考下2024-06-06
基于JavaScript實(shí)現(xiàn)滑動(dòng)門效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)滑動(dòng)門效果的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
JavaScript實(shí)現(xiàn)捕獲鼠標(biāo)坐標(biāo)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)捕獲鼠標(biāo)坐標(biāo),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04

