|
|
@@ -2,44 +2,80 @@
|
|
|
(function ($, window, document, undefined) {
|
|
|
'use strict';
|
|
|
|
|
|
- var pluginName = 'iframes';
|
|
|
- var thisElement = '';
|
|
|
- var height = '500px';//以这种形式出现的iframe,必须设置高度,不能设置100%
|
|
|
+ let pluginName = 'iframes';
|
|
|
+ let tabContainer = '';
|
|
|
+ let frameContainer = '';
|
|
|
+ let height = '700px';//以这种形式出现的iframe,必须设置高度,不能设置100%
|
|
|
//入口方法
|
|
|
$.fn[pluginName] = function (options) {
|
|
|
- var self = $(this);
|
|
|
- thisElement = self;
|
|
|
+ let self = $(this);
|
|
|
if (this == null)
|
|
|
return null;
|
|
|
- var data = this.data(pluginName);
|
|
|
+ let data = this.data(pluginName);
|
|
|
if (!data) {
|
|
|
data = new BaseIframe(this, options);
|
|
|
self.data(pluginName, data);
|
|
|
}
|
|
|
return data;
|
|
|
};
|
|
|
-
|
|
|
-
|
|
|
- var BaseIframe = function (element, options) {
|
|
|
+ let BaseIframe = function (element, options) {
|
|
|
this.$element = $(element);
|
|
|
this.options = $.extend(true, {}, this.default, options);
|
|
|
+ tabContainer = $('#'+this.options.tabContainer);
|
|
|
+ frameContainer = $('#'+this.options.frameContainer);
|
|
|
+ console.log(this.options,tabContainer,frameContainer);
|
|
|
this.init();
|
|
|
}
|
|
|
-
|
|
|
//默认配置
|
|
|
BaseIframe.prototype.default = {
|
|
|
showIndex: 0, //默认显示页索引
|
|
|
- loadAll: false//true=一次全部加在页面,false=只加在showIndex指定的页面,其他点击时加载,提高响应速度
|
|
|
+ loadAll: false,//true=一次全部加在页面,false=只加在showIndex指定的页面,其他点击时加载,提高响应速度
|
|
|
+ tabContainer: '',
|
|
|
+ frameContainer: ''
|
|
|
}
|
|
|
-
|
|
|
- //结构模板
|
|
|
+ // 结构模板参考
|
|
|
+ // <ul class="nav nav-tabs page-header-tab" >
|
|
|
+ // <li class="nav-item">
|
|
|
+ // <a class="nav-link active" id="pills-calendar-tab" data-toggle="pill" href="#pills-calendar" role="tab" aria-controls="pills-calendar" aria-selected="false">单人关卡</a>
|
|
|
+ // </li>
|
|
|
+ // <li class="nav-item">
|
|
|
+ // <a class="nav-link" id="pills-timeline-tab" data-toggle="pill" href="#pills-timeline" role="tab" aria-controls="pills-timeline" aria-selected="true">对战关卡</a>
|
|
|
+ // </li>
|
|
|
+ // </ul>
|
|
|
+ // <div class="row clearfix">
|
|
|
+ // <div class="col-md-12 ">
|
|
|
+ // <div class="tab-content" id="pills-tabContent">
|
|
|
+ // <div class="tab-pane fade show active" id="pills-calendar" role="tabpanel" aria-labelledby="pills-calendar-tab">
|
|
|
+ // <div class="card">
|
|
|
+ // <div class="card-body">
|
|
|
+ // </div>
|
|
|
+ // </div>
|
|
|
+ // </div>
|
|
|
+ // <div class="tab-pane fade" id="pills-timeline" role="tabpanel" aria-labelledby="pills-timeline-tab">
|
|
|
+ // <div class="card">
|
|
|
+ // <div class="card-body">
|
|
|
+ // </div>
|
|
|
+ // </div>
|
|
|
+ // </div>
|
|
|
+ // </div>
|
|
|
+ // </div>
|
|
|
+ // </div>
|
|
|
+ //根据上面列子结构模板
|
|
|
BaseIframe.prototype.template = {
|
|
|
- div_tabs: '<div class="row content-tabs"></div>',
|
|
|
- nav_menuTabs: '<nav class="page-tabs J_menuTabs"></nav>',
|
|
|
- nav_a: '<a href="javascript:;" class="J_menuTab" data-id="{0}" data-index="{1}" name="{2}">{3}</a>',//这里不能用id,id会追加代码到a标签内
|
|
|
- div_content: '<div class="page-tabs-content" id="page-tabs"></div>',
|
|
|
- div_iframe: '<div class="row J_mainContent" id="content-tabs"></div>',
|
|
|
- iframe: '<iframe class="J_iframe" name="{0}" data-index="{1}" width="100%" height="{2}" src="{3}" frameborder="0" data-id="{4}" seamless style="display: none;"></iframe>',
|
|
|
+ nav_tabs: '<ul class="nav nav-tabs page-header-tab" id="page-tabs"></ul>',
|
|
|
+ nav_item: '<li class="nav-item"></li>',
|
|
|
+ nav_a: '<a href="javascript:;" class="nav-link " data-toggle="pill" role="tab" aria-selected="false" data-id="{0}" data-index="{1}" name="{2}" url="{3}">{2}</a>',//这里不能用id,id会追加代码到a标签内
|
|
|
+ div_content:
|
|
|
+ ' <div class="row clearfix">\n' +
|
|
|
+ ' <div class="col-md-12 ">\n' +
|
|
|
+ ' <div class="tab-content" id="tab-content">\n' +
|
|
|
+ ' </div>\n' +
|
|
|
+ ' </div>\n' +
|
|
|
+ ' </div>',
|
|
|
+ div_iframe: '' +
|
|
|
+ ' <div class="tab-pane fade show active" id="iframe-content" role="tabpanel" aria-labelledby="pills-calendar-tab">\n' +
|
|
|
+ ' </div>\n',
|
|
|
+ iframe: '<iframe data-id="{0}" data-index="{1}" name="{2}" src="{3}" height="{4}" width="100%" frameborder="0" seamless style="display: none;"></iframe>',
|
|
|
a_close: '<i class="fa fa-remove" title="关闭" data-id="{0}"></i>'
|
|
|
}
|
|
|
|
|
|
@@ -55,189 +91,190 @@
|
|
|
//指定为默认值
|
|
|
this.options.showIndex = this.default.showIndex;
|
|
|
}
|
|
|
- if(this.options.height){
|
|
|
+ if (this.options.height) {
|
|
|
height = this.options.height;
|
|
|
}
|
|
|
//清除原来的tab页
|
|
|
- this.$element.html("");
|
|
|
+ tabContainer.html("");
|
|
|
+ frameContainer.html("");
|
|
|
this.builder(this.options.data);
|
|
|
}
|
|
|
|
|
|
//使用模板搭建页面结构
|
|
|
BaseIframe.prototype.builder = function (data) {
|
|
|
- var div_tabs = $(this.template.div_tabs);
|
|
|
- var nav_menuTabs = $(this.template.nav_menuTabs);
|
|
|
- var div_content = $(this.template.div_content);
|
|
|
-
|
|
|
- var div_iframe = $(this.template.div_iframe);
|
|
|
- for (var i = 0; i < data.length; i++) {
|
|
|
+ //生成菜单栏
|
|
|
+ let nav_tabs = $(this.template.nav_tabs);
|
|
|
+ for (let i = 0; i < data.length; i++) {
|
|
|
+ let nav_item = $(this.template.nav_item);
|
|
|
//nav-tab
|
|
|
- var nav_a = $(this.template.nav_a.format(data[i].url,i,data[i].id ,data[i].text));
|
|
|
+ let nav_a = $(this.template.nav_a.format(data[i].id, i, data[i].text, data[i].url));
|
|
|
//如果可关闭,插入关闭图标,并绑定关闭事件
|
|
|
if (data[i].closeable) {
|
|
|
- var a_close = $(this.template.a_close.format(data[i].id));
|
|
|
-
|
|
|
+ let a_close = $(this.template.a_close.format(data[i].id));
|
|
|
nav_a.append(" ");
|
|
|
nav_a.append(a_close);
|
|
|
}
|
|
|
-
|
|
|
- div_content.append(nav_a);
|
|
|
-
|
|
|
-
|
|
|
+ nav_item.append(nav_a);
|
|
|
+ nav_tabs.append(nav_item);
|
|
|
}
|
|
|
- nav_menuTabs.append(div_content);
|
|
|
- div_tabs.append(nav_menuTabs);
|
|
|
- this.$element.append(div_tabs);
|
|
|
- this.$element.append(div_iframe);
|
|
|
- this.loadData();
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加Iframe
|
|
|
- * */
|
|
|
- BaseIframe.prototype.openIframe = function(dataUrl,menuName,dataIndex){
|
|
|
- //console.log("openiframe",this);
|
|
|
- // 获取标识数据
|
|
|
- var flag = true;
|
|
|
- if (dataUrl == undefined || $.trim(dataUrl).length == 0)return false;
|
|
|
- thisElement.find("#content-tabs iframe").each(function(){
|
|
|
- //console.log('id',$(this).data('id'));
|
|
|
- //console.log('url',dataUrl);
|
|
|
- if($(this).data('id') == dataUrl){
|
|
|
-
|
|
|
- flag = false;
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
|
|
|
- if(flag){
|
|
|
-
|
|
|
- var iframe = $(this.template.iframe.format(menuName,dataIndex,height,dataUrl,dataUrl));
|
|
|
-
|
|
|
- thisElement.find("#content-tabs").append(iframe);
|
|
|
- }
|
|
|
- BaseIframe.prototype.hidden_a(menuName);
|
|
|
- return false;
|
|
|
+ let div_content = $(this.template.div_content);
|
|
|
+ let div_iframe = $(this.template.div_iframe);
|
|
|
+ div_content.find("#tab-content").append(div_iframe);
|
|
|
+ //标签列表,和标签所显示的内容
|
|
|
+ tabContainer.append(nav_tabs);
|
|
|
+ frameContainer.append(div_content);
|
|
|
+ this.loadData();
|
|
|
}
|
|
|
-
|
|
|
/**加载数据*/
|
|
|
BaseIframe.prototype.loadData = function () {
|
|
|
- var data = this.options.data;
|
|
|
+ let data = this.options.data;
|
|
|
//如果是当前页或者配置了一次性全部加载,否则点击tab页时加载
|
|
|
- for (var i = 0; i < data.length; i++) {
|
|
|
+ for (let i = 0; i < data.length; i++) {
|
|
|
if (this.options.loadAll || this.options.showIndex == i) {
|
|
|
if (data[i].url) {
|
|
|
// 添加iframe
|
|
|
- var iframe = $(this.template.iframe.format(data[i].id,i,height,data[i].url,data[i].url));
|
|
|
- this.$element.find("#content-tabs").append(iframe);
|
|
|
+ let iframe = $(this.template.iframe.format(data[i].id, i, data[i].text, data[i].url, height));
|
|
|
+ frameContainer.find("#iframe-content").append(iframe);
|
|
|
} else {
|
|
|
console.error("id=" + data[i].id + "的iframe页未指定url");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //console.log("this++",this);
|
|
|
- //console.log("thisdafult++",BaseIframe.prototype.default);
|
|
|
- if(data.length > 1){
|
|
|
- this.$element.find("#content-tabs iframe").eq(this.options.showIndex).css("display","inline");
|
|
|
- this.$element.find('#page-tabs a').eq(this.options.showIndex).addClass('active');
|
|
|
- }else{
|
|
|
- this.$element.find("#content-tabs iframe").eq(0).css("display","inline");
|
|
|
- this.$element.find('#page-tabs a').eq(0).addClass('active');
|
|
|
+ //存在数据时候,设置active
|
|
|
+ if (data.length > 1) {
|
|
|
+ frameContainer.find("#iframe-content iframe").eq(this.options.showIndex).css("display", "inline");
|
|
|
+ tabContainer.find('#page-tabs a').eq(this.options.showIndex).addClass('active');
|
|
|
+ console.log(tabContainer.find('#page-tabs a').eq(this.options.showIndex))
|
|
|
+ } else {
|
|
|
+ frameContainer.find("#iframe-content iframe").eq(0).css("display", "inline");
|
|
|
+ tabContainer.find('#page-tabs a').eq(0).addClass('active');
|
|
|
}
|
|
|
//绑定事件
|
|
|
BaseIframe.prototype.eventses();
|
|
|
- //$("#content-tabs iframe").css("height",height);
|
|
|
- //console.log(thisElement.attr('id'));
|
|
|
- //console.log(thisElement.html());
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 添加Iframe
|
|
|
+ * */
|
|
|
+ BaseIframe.prototype.openIframe = function (context) {
|
|
|
+ let {dataId, dataUrl, menuName, dataIndex} = context;
|
|
|
+ // 获取标识数据
|
|
|
+ let flag = true;
|
|
|
+ if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;
|
|
|
+ frameContainer.find("#iframe-content iframe").each(function () {
|
|
|
+ console.log('id', $(this).data('id'));
|
|
|
+ console.log('url', dataUrl);
|
|
|
+ if ($(this).data('id') == dataId) {
|
|
|
+ flag = false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (flag) {
|
|
|
+ let iframe = $(this.template.iframe.format(dataId, dataIndex, menuName, dataUrl, height,));
|
|
|
+ frameContainer.find("#iframe-content").append(iframe);
|
|
|
+ }
|
|
|
+ BaseIframe.prototype.hidden_a(menuName);
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**点击事件*/
|
|
|
BaseIframe.prototype.eventses = function () {
|
|
|
- //console.log("thisElement",thisElement);
|
|
|
- thisElement.find("#page-tabs a i").each(function(){
|
|
|
- $(this).click(function(){
|
|
|
- var id = $(this).data('id');
|
|
|
- //console.log('ad0',id);
|
|
|
+ //关闭按钮
|
|
|
+ tabContainer.find("#page-tabs a i").each(function () {
|
|
|
+ $(this).click(function () {
|
|
|
+ let id = $(this).data('id');
|
|
|
+ console.log('ad0', id);
|
|
|
BaseIframe.prototype.remove(id);
|
|
|
});
|
|
|
});
|
|
|
- thisElement.find("#page-tabs a").click(function(){
|
|
|
- //console.log("点击a: ",this);
|
|
|
- var dataUrl = $(this).data('id');
|
|
|
- var menuName = $(this).text();
|
|
|
- var name = $(this).attr('name');
|
|
|
- var dataIndex = $(this).data('index');;
|
|
|
- BaseIframe.prototype.openIframe(dataUrl,name,dataIndex);
|
|
|
+ //切换tab
|
|
|
+ tabContainer.find("#page-tabs a").click(function () {
|
|
|
+ console.log("点击a: ", this);
|
|
|
+ let dataId = $(this).data('id');
|
|
|
+ // var menuName = $(this).text();
|
|
|
+ let menuName = $(this).attr('name');
|
|
|
+ let dataUrl = $(this).attr('url');
|
|
|
+ let dataIndex = $(this).data('index');
|
|
|
+ BaseIframe.prototype.openIframe({
|
|
|
+ dataUrl, menuName, dataIndex, dataId
|
|
|
+ });
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
//新增一个Iframe页
|
|
|
BaseIframe.prototype.addIframe = function (obj) {
|
|
|
- var nav_a = $(this.template.nav_a.format(obj.url,$('#page-tabs a').length,obj.id ,obj.text));
|
|
|
+ let _index = $('#page-tabs a').length;
|
|
|
+ let nav_a = $(this.template.nav_a.format(obj.id,_index,obj.text,obj.url));
|
|
|
//如果可关闭,插入关闭图标,并绑定关闭事件
|
|
|
if (obj.closeable) {
|
|
|
- var a_close = $(this.template.a_close.format(obj.id));
|
|
|
-
|
|
|
+ let a_close = $(this.template.a_close.format(obj.id));
|
|
|
nav_a.append(" ");
|
|
|
nav_a.append(a_close);
|
|
|
}
|
|
|
-
|
|
|
- thisElement.find("#page-tabs").append(nav_a);
|
|
|
-
|
|
|
+ let nav_item = $(this.template.nav_item);
|
|
|
+ nav_item.append(nav_a);
|
|
|
+ tabContainer.find('#page-tabs').append(nav_item);
|
|
|
BaseIframe.prototype.eventses();
|
|
|
+
|
|
|
+ //自动切换到当前页面
|
|
|
+ BaseIframe.prototype.openIframe({
|
|
|
+ dataUrl:obj.url, menuName:obj.text, dataIndex:_index, dataId:obj.id
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
/**隐藏其他的,显示当前*/
|
|
|
- BaseIframe.prototype.hidden_a = function(obj){
|
|
|
- thisElement.find('#page-tabs a').each(function(){
|
|
|
+ BaseIframe.prototype.hidden_a = function (obj) {
|
|
|
+ tabContainer.find('#page-tabs a').each(function () {
|
|
|
$(this).removeClass('active');
|
|
|
});
|
|
|
- thisElement.find('#content-tabs iframe').each(function(){
|
|
|
- $(this).css("display","none");
|
|
|
+ frameContainer.find('#iframe-content iframe').each(function () {
|
|
|
+ $(this).css("display", "none");
|
|
|
});
|
|
|
- thisElement.find("iframe[name='"+obj+"']").css("display","inline");
|
|
|
- thisElement.find("a[name='"+obj+"']").addClass('active');
|
|
|
- //console.log("height",height);
|
|
|
- //thisElement.find("#content-tabs iframe").css("height",height);
|
|
|
+ frameContainer.find("iframe[name='" + obj + "']").css("display", "inline");
|
|
|
+ tabContainer.find("a[name='" + obj + "']").addClass('active');
|
|
|
}
|
|
|
|
|
|
//根据id获取活动也标签名
|
|
|
- BaseIframe.prototype.find=function (tabId) {
|
|
|
- return this.$element.find(".nav-tabs li a[href='#" + tabId + "']").text();
|
|
|
+ BaseIframe.prototype.find = function (tabId) {
|
|
|
+ return tabContainer.find(".nav-tabs li a[href='#" + tabId + "']").text();
|
|
|
}
|
|
|
|
|
|
// 删除活动页
|
|
|
- BaseIframe.prototype.remove=function (obj) {
|
|
|
- thisElement.find("#content-tabs iframe[name='"+obj+"']").remove();
|
|
|
- thisElement.find("#page-tabs a[name='"+obj+"']").remove();
|
|
|
- thisElement.find('#page-tabs a').eq(0).addClass('active');
|
|
|
- thisElement.find("#content-tabs iframe").eq(0).css("display","inline");
|
|
|
- if(thisElement.find('#page-tabs a').length > 0){
|
|
|
- var a = thisElement.find('#page-tabs a').eq(0);//找到第一个a标签取出数据
|
|
|
- this.openIframe(a.data('id'),a.attr('name'),a.data('index'));
|
|
|
+ BaseIframe.prototype.remove = function (obj) {
|
|
|
+ frameContainer.find("#iframe-content iframe[data-id='" + obj + "']").remove();
|
|
|
+ tabContainer.find("#page-tabs a[data-id='" + obj + "']").parent().remove();
|
|
|
+ //设置一个显示的元素
|
|
|
+ tabContainer.find('#page-tabs a').eq(0).addClass('active');
|
|
|
+ frameContainer.find("#iframe-content iframe").eq(0).css("display", "inline");
|
|
|
+ if (tabContainer.find('#page-tabs a').length > 0) {
|
|
|
+ let a = tabContainer.find('#page-tabs a').eq(0);//todo 找到第一个a标签取出数据
|
|
|
+ this.openIframe({
|
|
|
+ dataUrl: a.attr('url'), menuName: a.attr('name'), dataIndex: a.data('index'), dataId: a.data('id')
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//根据id设置活动iframe页
|
|
|
- BaseIframe.prototype.showIframe=function (tabId) {
|
|
|
- var a = thisElement.find("#page-tabs a[name='" + tabId + "']");//找到a标签
|
|
|
- //console.log("a标签",a);
|
|
|
- var dataUrl = a.data('id');
|
|
|
- var dataIndex = a.data('index');;
|
|
|
- BaseIframe.prototype.openIframe(dataUrl,tabId,dataIndex);
|
|
|
+ BaseIframe.prototype.showIframe = function (tabId) {
|
|
|
+ let a = tabContainer.find("#page-tabs a[name='" + tabId + "']");//找到a标签
|
|
|
+ console.log("a标签", a);
|
|
|
+ let dataUrl = a.data('id');
|
|
|
+ let dataIndex = a.data('index');
|
|
|
+ BaseIframe.prototype.openIframe(dataUrl, tabId, dataIndex);
|
|
|
}
|
|
|
|
|
|
//获取当前活动iframe页的ID
|
|
|
- BaseIframe.prototype.getCurrentIframeId=function () {
|
|
|
- var id=thisElement.find("#page-tabs .active a").attr("name");
|
|
|
- console.log('id',id);
|
|
|
+ BaseIframe.prototype.getCurrentIframeId = function () {
|
|
|
+ var id = tabContainer.find("#page-tabs .active a").attr("name");
|
|
|
+ console.log('id', id);
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
String.prototype.format = function () {
|
|
|
if (arguments.length == 0) return this;
|
|
|
- for (var s = this, i = 0; i < arguments.length; i++)
|
|
|
+ let s = this;
|
|
|
+ for (let i = 0; i < arguments.length; i++)
|
|
|
s = s.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
|
|
|
return s;
|
|
|
};
|