ibms-dome/Frontend/js/yourteam/plugins/yt-tab/yt-tab.js

81 lines
2.7 KiB
JavaScript
Raw Normal View History

/**
* YourTeam 上方 Tab 頁籤
*
* 使用方式
* <button type="button" data-tabname="testTab" data-target="testDiv1">頁籤按鈕1</button>
* <button type="button" data-tabname="testTab" data-target="testDiv2">頁籤按鈕2</button>
*
* <div id="testDiv1" data-tabname="testTab" data-tabrole="child"></div>
* <div id="testDiv2" data-tabname="testTab" data-tabrole="child"></div>
* */
var YT = YT || {};
2022-11-15 12:59:27 +08:00
var _ytTabInited = [];
$(function () {
})
/**
* 初始全頁面 yt tab
* */
function initTabsByEle() {
/*_ytTabInited = [];*/
$("[data-tabname][data-target]:not([data-tabrole=child])").each(function (index, value) {
2022-11-15 12:59:27 +08:00
let tabName = $(value).data("tabname");
if (_ytTabInited.indexOf(tabName) == -1) {
var ytTab = new YT.Tab({ tabName: tabName })
_ytTabInited.push(tabName);
}
2022-11-15 12:59:27 +08:00
})
}
2022-11-15 12:59:27 +08:00
class YourTeamTab {
2022-11-15 12:59:27 +08:00
constructor(option = {}) {
this.tabName = option.tabName ?? null;
this.init()
2022-11-15 12:59:27 +08:00
}
init = function () {
if (_ytTabInited.indexOf(this.tabName) != -1) {
_ytTabInited.splice($.inArray(this.tabName, _ytTabInited), 1);
$(`[data-tabname=${this.tabName}][data-target]`).off("click").unbind("click");
}
2022-11-15 12:59:27 +08:00
this.event();
$(`[data-tabname=${this.tabName}][data-tabrole=child]`).css("display", "none");
if ($(`[data-tabname=${this.tabName}][data-target].active`).length == 0) {
$(`[data-tabname=${this.tabName}][data-target]`).first().trigger("click");
} else {
$(`[data-tabname=${this.tabName}][data-target].active`).first().trigger("click");
}
_ytTabInited.push(this.tabName);
2022-11-15 12:59:27 +08:00
}
event = function () {
let clsObj = this;
// Tab Item 按鈕 click
$(`[data-tabname=${this.tabName}][data-target]`).off("click").on("click", function (e) {
2022-11-15 12:59:27 +08:00
let target = $(this).data("target");
let obj = this;
$(`[data-tabname=${clsObj.tabName}][data-target]:not([data-tabrole=child])`).removeClass("active");
$(obj).addClass("active");
// 觸發 yt:tab:change事件
$(obj).trigger("yt:tab:change");
2022-11-15 12:59:27 +08:00
let tabName = $(target).data("tabname");
if (tabName) {
// 找出該觸發對象 block
2022-11-15 12:59:27 +08:00
if ($(target).data("tabrole") == "child") {
$(obj).trigger("yt:tab:show");
$(`[data-tabname='${tabName}'][data-tabrole='child']`).css("opacity", 0).hide();
$(target).show().animate({ opacity: 1 }, 200, function () {
$(obj).trigger("yt:tab:shown");
});
}
}
})
}
}
YT.Tab = YT.Tab || YourTeamTab;