`

前端框架iviewui使用示例之菜单+多Tab页布局

阅读更多
前言:
  综合使用menu、tab实现菜单+Tab页的布局模式。学习调试作品,代码不是很严谨,但基本功能都实现了。

效果:


代码:
<!DOCTYPE html>

<!-- 
 作者:wallimn
 博客:http://wallimn.iteye.com
 时间:2017-11-22
 -->
<html>
<head>
    <meta charset="utf-8">
    <title>iview示例</title>
    <link rel="stylesheet" type="text/css" href="iview/styles/iview.css">
    <script type="text/javascript" src="js/vue.js"></script>
    <script type="text/javascript" src="iview/iview.js"></script>
    <script type="text/javascript" src="js/jquery-1.12.4.js"></script>
	<style type="text/css">
		body,html{
	        background: #f5f7f9;
		}
		.layout{
	        
	    }
	    .layout-logo{
	        width: 100px;
	        height: 40px;
	        background: #5b6270;
	        border-radius: 3px;
	        float: left;
	        position: relative;
	        top: 15px;
	        left: 20px;
	    }
	    .layout-content{
	    	position:absolute;
	    	right:0;
	    	left:0;
	    	top:90px;
	    	bottom:90px;
	        margin: 15px;
	        overflow: hidden;
	        background: #fff;
	        border-radius: 4px;
	    }
	    .layout-content-main{
	        min-height: 400px;
	        padding: 10px;
	    }
	    .layout-copy{
	        text-align: center;
	        padding: 5px 0 10px;
	        color: #9ea7b4;
	        position:absolute;
	        bottom:0;
	        right:0;
	        left:0;
	    	width:100%;
	        height:90px;
	    }
	    .layout-top{
	    	position:absolute;
	    	top:0;
	    	right:0;
	    	left:0;
	    	width:100%;
	    	height:90px;
	    }
    </style>
</head>
<body>
	<div id="app">
		<div class="layout">
			<div class="layout-top">
	            <div class="layout-logo"></div>
			</div>
	        <div class="layout-content">
	            <Row >
	                <i-col span="5">
	                    <i-menu active-name="1-1" width="auto" accordion :open-names="[menuData[0].name]" @on-select="menuSelect" :style="{height:mainHeight+'px'}">
	                        <Submenu v-for="item in menuData" :name="item.name">
	                        	<template slot="title">
	                                <Icon type="ios-analytics"></Icon>{{item.label}}
	                            </template>
	                        	<menu-item v-for="mi in item.menuitems" :name="mi.name">{{mi.label}}</menu-item>
	                        </Submenu>
	                    </i-menu>
	                </i-col>
	                <i-col span="19">
	                    <div class="layout-content-main" >
							<Tabs type="card" @on-tab-remove="removeTab" @on-click="clickTab" :animated="false" :value="activeTab">
								<template v-for="(item,index) in mainTabs">
							        <tab-pane :label="item.label" closable :name="item.name" v-if="item.show">
							        		<iframe frameborder="0" width="100%" :height="frameHeight" marginheight="0" scrolling="auto" marginwidth="0" :src="item.url"></iframe>
							        </tab-pane>
								</template>
						    </Tabs>
						</div>
	                </i-col>
	            </Row>
	        </div>
	        <div class="layout-copy">
	            2017-2018 &copy; http://wallimn.iteye.com
	        </div>
	    </div>	 
	</div>

	<script type="text/javascript">
		var vue = new Vue({
			el:'#app',
			data:function(){
				return {
					menuData:[
	                	{	label:'菜单1',name:"m1",
	                		menuitems:[
	                			{name:'m1-1',label:'菜单1-1',url:'iview.html'},
	                			{name:'m1-2',label:'菜单1-2',url:'grid.html'},
	                			{name:'m1-3',label:'菜单1-3',url:'button.html'},
	                			{name:'m1-4',label:'菜单1-4',url:'table.html'},
	                		]
	                	},
	                	{	label:'菜单2',name:"m2",
	                		menuitems:[
	                			{name:'m2-1',label:'菜单2-1',url:'http://wallimn.iteye.com'},
	                			{name:'m2-2',label:'菜单2-2',url:'m2-1.html'},
	                			{name:'m2-3',label:'菜单2-3',url:'m2-1.html'},
	                			{name:'m2-4',label:'菜单2-4',url:'m2-1.html'},
	                		]
	                	},
	                	{	label:'菜单3',name:"m3",
	                		menuitems:[
	                			{name:'m3-1',label:'菜单3-1',url:'m3-1.html'},
	                			{name:'m3-2',label:'菜单3-2',url:'m3-1.html'},
	                			{name:'m3-3',label:'菜单3-3',url:'m3-1.html'},
	                			{name:'m3-4',label:'菜单3-4',url:'m3-1.html'},
	                		]
	                	},
	                	{	label:'菜单4',name:"m4",
	                		menuitems:[
	                			{name:'m4-1',label:'菜单4-1',url:'m4-1.html'},
	                			{name:'m4-2',label:'菜单4-2',url:'m4-1.html'},
	                			{name:'m4-3',label:'菜单4-3',url:'m4-1.html'},
	                			{name:'m4-4',label:'菜单4-4',url:'m4-1.html'},
	                		]
	                	}
	                ],
	                activeTab:null,
	                mainHeight: 0,
	                frameHeight: 0,
	                mainTabs:[]
	            };
	        },
	        mounted:function(){
	        	this.setFrameHeight();
	        },
	        methods:{
	        	clickTab:function(name){
	        		var vm=this;
	        		vm.frameHeight -= 1;
	        		//解决chrome浏览器中tab切换滚动条消失的问题。
	        		window.setTimeout(function(){
	        			vm.frameHeight=vm.frameHeight+1;
	        		},100);
	        	},
	        	//根据名称来查找对应的菜单条目
	        	getMenuItem:function(name){
	        		for(var sm=0; sm<this.menuData.length; sm++){
	        			for(var mi=0; mi<this.menuData[sm].menuitems.length; mi++){
	        				if(this.menuData[sm].menuitems[mi].name==name)return this.menuData[sm].menuitems[mi];
	        			}
	        		}
	        		return {};//这个应该不可能发生
	        	},
	        	//根据名称查找对应的Tab页。
	        	getTab:function(name){
	        		for(var i=0; i<this.mainTabs.length; i++){
	        			if(this.mainTabs[i].name==name)return this.mainTabs[i];
	        		}
	        		return null;//没有找到
	        	},
	        	//设置Tab页不可见。
	        	removeTab:function (name) {
	        		var tab = this.getTab(name);
	        		if(tab!=null)tab.show=false;
	                console.log("mainTabRemove, name=",name,", label=",tab.label,", url=",tab.url);
	            },
	            setFrameHeight:function(){
	            	//调整掉一些补白的值
	            	this.mainHeight = (document.documentElement.scrollHeight || document.body.scrollHeight)-90-90;
	            	this.frameHeight = this.mainHeight-90;
	            },
	            //菜单点击
	            menuSelect:function(name){
	            	this.$Message.info(name);
	            	var tab = this.getTab(name);
	            	if(tab==null){
		            	var mi = this.getMenuItem(name);
		            	var mi = $.extend({},mi,{show:true});
		            	this.mainTabs.push(mi);
	            	}
	            	else{
	            		tab.show=true;
	            	}
	            	this.activeTab=name;
	            },
	            onAuthor:function(){
	            	this.$Message.info("wallimn,http://wallimn.iteyey.com");
	            }
			}
		});
		
		
		window.onresize=function(){
			vue.setFrameHeight();
		}
	</script>
</body>
</html>
  • 大小: 36.8 KB
分享到:
评论
2 楼 wallimn 2018-05-19  
水淼火 写道
你好,我使用以后,图标不显示,应该怎么引用呢,谢谢

打开开发者工具,看看是不是有什么资源没有找到。再看看iviewui的代码有没有转化为正常的HTML代码。
1 楼 水淼火 2018-05-18  
你好,我使用以后,图标不显示,应该怎么引用呢,谢谢

相关推荐

    H+前端UI框架

    **H+前端UI框架** H+是一款基于Bootstrap框架深度定制的高性能前端UI解决方案,专为开发者和设计师打造。它的设计风格简洁、现代,且高度可定制化,适用于各类企业级项目开发。H+提供了丰富的组件和示例,帮助...

    springboot框架+thymeleaf模板引擎+layui前端框架+数据库

    Layui是一个轻量级的前端UI框架,它的特点是模块化、响应式、简洁且易于上手。"Layui前端框架"提供了丰富的组件,如表格、按钮、弹框、表单、图标等,用于构建美观的用户界面。通过与SpringBoot和Thymeleaf的结合,...

    OneUI3.1前端框架

    "OneUI3.1前端框架"是一个专门设计用于构建自适应多平台浏览器界面的WEB前端框架。这个框架的出现,极大地简化了开发人员在创建现代Web应用时对用户体验和跨平台兼容性的处理。以下是关于OneUI3.1的详细知识点: 1....

    layui点击导航栏刷新tab页的示例代码

    在现代网页设计和开发中,Layui作为一个流行的前端UI框架,它的使用日益广泛。它基于jQuery,提供了一整套的解决方案,包括模块化、可定制的界面组件,使得网页开发更加快捷、高效。Layui的tab组件是该框架中非常...

    Iview前端项目框架

    “Iview前端项目框架”是一个基于Vue.js的UI组件库,专为开发高效、美观的Web应用界面而设计。Vue.js是目前非常流行的前端JavaScript框架,以其轻量级、易上手和灵活性受到开发者喜爱。Iview则是Vue.js生态系统中的...

    H+非常火的响应式前端框架

    H+前端框架的核心特点在于其强大的布局系统,它采用了Flexbox模型,这使得在各种屏幕尺寸下都能实现灵活的布局。Flexbox允许开发者轻松调整元素的位置和大小,确保页面在不同分辨率下的自适应性。此外,H+还包含了...

    ace+Admin前端框架

    Ace+Admin前端框架是一款广泛应用在企业级Web应用中的开源UI框架,它结合了Ace和AdminLTE两个优秀的前端组件库,提供了丰富的界面元素、布局选项和交互设计,旨在为开发者提供一个高效、美观且易于定制的开发环境。...

    前端项目带有可定制菜单示例

    在前端开发领域,一个带有可定制菜单的项目通常涉及到用户界面设计、交互逻辑以及动态数据处理等多个关键知识点。这样的项目旨在提供用户自定义选择菜单项的功能,以满足不同用户的需求和偏好,提升用户体验。以下是...

    Vue Element UI 完整版前端框架

    3. **易于使用**:Element UI 提供了详细的文档和示例,方便快速上手。 4. **高度可定制**:开发者可以根据需要调整主题颜色,甚至可以自定义每个组件的样式。 5. **兼容性和性能**:Element UI 对现代浏览器支持...

    最新版H+UI前端模板框架

    《最新版H+UI前端模板框架深度解析》 在当今的Web开发领域,前端框架扮演着至关重要的角色,它们能够极大地提升开发效率,提供统一的设计风格,并为开发者提供丰富的组件库。本文将深入探讨“最新版H+UI前端模板...

    vue+iview框架实现左侧动态菜单功能的示例代码

    在使用Vue.js与iView框架构建项目时,经常会遇到需要实现动态左侧菜单的需求。这个示例代码展示了如何在Vue CLI 3环境下结合iView框架,根据后端返回的数据动态渲染菜单,并实现高亮当前选中页面的效果。以下是关键...

    Unicorn Admin前端框架

    Unicorn Admin是一款备受推崇的前端开发框架,专为构建高效、响应式且用户友好的管理界面而设计。这款框架以其独特的设计风格、丰富的组件库和强大的功能,深受开发者喜爱,尤其适用于创建企业级后台管理系统。 在...

    移动端ui框架示例

    【移动端UI框架示例】是针对手机和平板设备设计的一款名为"Hui"的框架的实践应用展示。这个框架提供了一套完整的解决方案,旨在简化移动端Web界面的布局与组件设计,从而提升开发效率和用户体验。 Hui框架的核心...

    iView Admin 是一个前端管理后台集成解决方案 它基于 Vue.js 并使用 UI Toolkit iView

    iView Admin是一款基于Vue.js的前端管理后台集成解决方案,它结合了Vue.js的响应式特性和iView UI组件库的强大功能。Vue.js作为轻量级的JavaScript框架,以其简洁的API和高效的虚拟DOM操作,在单页应用(SPA)开发中...

    Easy UI前端框架

    Easy UI 是一个基于 jQuery 的轻量级前端框架,它的设计目标是简化网页界面的构建,提供丰富的组件和直观的API,让开发者能够快速地创建出美观且功能强大的用户界面。这个框架深受开发者喜爱,因为它极大地提高了...

    H+前端框架

    `H+4.9正版文档`文件包含了详尽的框架使用指南和API参考,从安装到使用,从基础组件到高级功能,都有清晰的步骤和示例代码,帮助开发者快速上手和深入学习。 ### 四、版本更新 `H+4.9正版源码`包含了框架的最新源...

    前端开源ui框架

    前端开源UI框架是开发网页应用时常用的一种工具,它们提供了丰富的组件和样式,帮助开发者快速构建用户界面,提高开发效率。这些框架通常基于HTML、CSS和JavaScript,且遵循一定的设计原则和规范,使得代码可维护性...

    hui ui 手机端ui框架

    HUI UI是一个专为移动端设计的前端框架,它的出现旨在提供一个功能丰富、易用性高的解决方案,以满足现代移动应用和网站的设计需求。相比其他框架,尤其是与广为人知的WEUI相比,HUI UI在功能上更加强大,提供了更多...

Global site tag (gtag.js) - Google Analytics