Easyui-tabs延迟加载:同一个界面嵌套多个Tab,点击/选中后才执行加载

    我们通常在一个主框架界面会嵌套多个Tabs, 当在浏览器打开该页面,会导致多个Tabs同时候请求页面数据,这样处理不但会给后台的数据库造成比较大的压力,同时也比较浪费流量。所以有必要实现这样的效果:同一个界面嵌套多个Tab,点击/选中后才执行加载。下面是两种实现方案的对比:

一、同时加载所有Tabs

<!-- ifame的'src'如果赋值,则会自动发起请求,下面每个iframe的src都有初始值,相当于所有的tabs都会同时加载 -->
<div class="easyui-tabs" style="width:100%; height:100%" data-options="region:'center', tabPosition:'top', fit:true, border:false">
	
			<div title="数据统计" data-options="tabWidth:112" style="padding:0px">
				<iframe id="statis" scrolling="no" frameborder="0"  src="${ctx}/admin/statis" style="width:100%; height:100%;"></iframe>
			</div>
			
			<div title="首页轮播" data-options="tabWidth:112" style="padding:0px">
				<iframe id="banner" scrolling="no" frameborder="0"  src="${ctx}/admin/banner" style="width:100%; height:100%;"></iframe>
			</div>
			
			<div title="首页频道" data-options="tabWidth:112" style="padding:0px">
				<iframe id="channel" scrolling="no" frameborder="0"  src="${ctx}/admin/channel" style="width:100%; height:100%;"></iframe>
			</div>
			
			<div title="教材目录" data-options="tabWidth:112" style="padding:0px">
				<iframe id="category" scrolling="no" frameborder="0"  src="${ctx}/admin/category" style="width:100%; height:100%;"></iframe>
			</div>
			
			<div title="教材管理" data-options="tabWidth:112" style="padding:0px">
				<iframe id="content" scrolling="no" frameborder="0"  src="${ctx}/admin/material" style="width:100%; height:100%;"></iframe>
			</div>
			
</div>

二、点击/选中Tab后才加载

<%@ page language="java" pageEncoding="utf-8" isELIgnored="false"%>
<html>
<head>
<title>后台信息管理</title>
<%@ include file="/common/meta.jsp"%>
<link href="${ctx}/css/style.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript">

	$(function() {
		initTabs();
	});
	
	//延迟加载tab,避免所有tabs同时请求加载页面
	//参考1:https://my.oschina.net/u/2331760/blog/5481398
	//参考2:https://blog.csdn.net/weixin_30251587/article/details/96632084
	function initTabs() {
		
		var url = "";
	 	$("#tabs").tabs({
			onSelect:function(title,index){
				
				var tab = $(this).tabs('getTab', index);
				var tabName = $(tab).panel("options").title;
				//alert(tabName);
				switch(tabName){
					case '数据统计':
	                    url = "${ctx}/admin/statis";
						break;
					case '首页轮播':
						url = "${ctx}/admin/banner";
						break;
					case '首页频道':
						url = "${ctx}/admin/channel";
						break;
					case '教材目录':
						url = "${ctx}/admin/category";
						break;
					case '教材管理':
						url = "${ctx}/admin/material";
						break;
				}
				
				if (!checkInitIframe(tab) || !isSameIframe(tab,url)){
					//如果tab没有url,或者和前一个url不是同一个,则刷新iframe
					refreshMyTab(tab,url);
				}
			},
			
			onUnselect:function(title,index){
			}
			
		});
	} 
	
	
	//根据指定url刷新iframe
	function refreshMyTab(tab,src){
		$(tab.find('iframe')[0]).attr('src',src);
	}
	
	//判断iframe是否有url,即iframe是否已经初始化
	function checkInitIframe(tab){
		return $(tab.find('iframe')[0]).attr('src');
	}
	
	//判断iframe的url是否和最新的url是否相同
	function isSameIframe(tab,src){
		if($(tab.find('iframe')[0]).attr('src') == src){
			return true;
		}
		return false;
	}

</script>

</head>

<body>
		
		<!-- ifame的src如果赋值,则会自动发起请求,下面第一个iframe的src有初始值,会自动加载,其余都没有初始值,只有在tab选中后,才对src赋值并加载页面,相当于延迟加载 -->
		<div id="tabs" class="easyui-tabs" style="width:100%; height:100%" data-options="region:'center', tabPosition:'top', fit:true, border:false">
	
			<div title="数据统计" data-options="tabWidth:112" style="padding:0px">
				<iframe id="statis" scrolling="no" frameborder="0"  src="${ctx}/admin/statis" style="width:100%; height:100%;"></iframe>
			</div>
			
			<div title="首页轮播" data-options="tabWidth:112" style="padding:0px">
				<iframe id="banner" scrolling="no" frameborder="0"  src="" style="width:100%; height:100%;"></iframe>
			</div>
			
			<div title="首页频道" data-options="tabWidth:112" style="padding:0px">
				<iframe id="channel" scrolling="no" frameborder="0"  src="" style="width:100%; height:100%;"></iframe>
			</div>
			
			<div title="教材目录" data-options="tabWidth:112" style="padding:0px">
				<iframe id="category" scrolling="no" frameborder="0"  src="" style="width:100%; height:100%;"></iframe>
			</div>
			
			<div title="教材管理" data-options="tabWidth:112" style="padding:0px">
				<iframe id="content" scrolling="no" frameborder="0"  src="" style="width:100%; height:100%;"></iframe>
			</div>
	
		</div>

</body>
</html>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思涛的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值