`

[ExtJS2.1教程-4]Menu(菜单)

    博客分类:
  • ext
阅读更多
menu.html
<html>
	<head>
		<title>菜单举例</title>
js css引用这里省略了
	</head>

	<body>

	</body>
</html>

menu.js
Ext.onReady(function(){
	
	var menu = new Ext.menu.Menu({
		minWidth:200,//最小宽度
		items:[{
			text:"first",
			handler:function(){Ext.Msg.alert("hello","我是菜单")}
		}]
	});
});

Menu中的defaultAlign:对齐方式 minWidth:200,最小宽度 shadow:菜单显示时候的阴影效果
菜单可以作用于任何元素下和任何控件下
是继承于Observable所以具有事件响应功能
items:菜单中重要属性,具体需要看add方法,通过她可以组合出多级菜单
Ext.menu.Item菜单选项 只要是这个类都可以作为菜单选项
包含
text 显示文本 hanlder点击事件 href hrefTarget 连接
icon iconCls修饰菜单选项的 即在菜单前面添加图标
icon 添加相对路径的图片
iconCls 指定样式

现在执行一下。
没有任何效果 因为我们并没指定menu的显示位置

下面我们改一下
menu.html
<html>
	<head>
		<title>菜单举例</title>
//js css引用这里省略了
	</head>

	<body>
<div id="menu_test">menu here</div>
	</body>
</html>

menu.js
Ext.onReady(function(){
	var menu = new Ext.menu.Menu({
		minWidth:200,
		items:[{
			text:"first",
			handler:function(){Ext.Msg.alert("hello","我是菜单")}
		}]
	});
        var el = Ext.get("menu_test");
	el.on("click",function(e){
		//menu.showAt(e.getXY());//作用于该位置
		menu.show(this);//作用于元素上
		//e.getXY();//得到事件触发的坐标
	})
        //作用于页面上的鼠标右键
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();//终止之前的事件响应,不然还会在页面上弹出讨厌的ie右键菜单
		menu.showAt(e.getXY());
	})
        //当然我们也可以让他租用在el的鼠标右键事件中
        el.on("contextmenu",function(e){
		//menu.showAt(e.getXY());
		e.stopEvent();
		menu.show(this);
		//e.getXY();
	})
});

现在执行一下。 ok成功了

下面我们再来看一下icon和iconCls
一个是通过页面相对位置的图片 一个是通过样式
使菜单前面出现一个小图标 相当于qq好友信息中的前面头像图标
默认使用Ext.BLANK_IMAGE_URL中的设置 即空白图标
Ext api 中描述 Defaults to "http://extjs.com/s.gif"
这也是为什么网速不好的时候会很慢,因为她要到http中加载
还会产生断网时可能某些地方引用了它产生图片不显示的白点
我们应该在ext加载的时候手动指定
Ext.onReady(function(){
	Ext.BLANK_IMAGE_URL = "../ext/resources/images/default/s.gif";
	var menu = new Ext.menu.Menu({
		minWidth:200,//最小宽度
		items:[{
			text:"first",
			icon:"icon-info.gif",
			handler:function(){Ext.Msg.alert("提示","hi")}
		},{
			text:"second",
			iconCls:"menu_cls",
			handler:function(){Ext.Msg.alert("提示","hi")}
		}]
	});
	var el = Ext.get("menu_test");
	el.on("click",function(e){
		//menu.showAt(e.getXY());
		menu.show(this);
		//e.getXY();
	})
	el.on("contextmenu",function(e){
		//menu.showAt(e.getXY());
		e.stopEvent();
		menu.show(this);
		//e.getXY();
	})
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		menu.showAt(e.getXY());
	})
});

执行一下,first的图标正常显示了,second没有显示这是因为使用iconCls需要定义css的样式类
修改一下menu.html
<html>
	<head>
		<title>菜单举例</title>
               <style type="text/css">
			.menu_cls{
				background:url('icon-info.gif');
			}
		</style>
//js css引用这里省略了
	</head>

	<body>
<div id="menu_test">menu here</div>
	</body>
</html>

执行一下,ok
我们还有就是经常看到的菜单分割线,你一定看到过,如果没有你看看浏览器上的文件,编辑,查看...就明白了
那个横线在这里太容易了
Ext.onReady(function(){
	Ext.BLANK_IMAGE_URL = "../ext/resources/images/default/s.gif";
	var menu = new Ext.menu.Menu({
		minWidth:200,//最小宽度
		items:[{
			text:"first",
			icon:"icon-info.gif",
			handler:function(){Ext.Msg.alert("提示","hi")}
		},"-",{
			text:"second",
			iconCls:"menu_cls",
			handler:function(){Ext.Msg.alert("提示","hi")}
		}]
	});
	var el = Ext.get("menu_test");
	el.on("click",function(e){
		//menu.showAt(e.getXY());
		menu.show(this);
		//e.getXY();
	})
	el.on("contextmenu",function(e){
		//menu.showAt(e.getXY());
		e.stopEvent();
		menu.show(this);
		//e.getXY();
	})
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		menu.showAt(e.getXY());
	})
});

只需在菜单分割的地方加上"-"即可。



下面我来来继续深入
同过menu的文档我们可以知道有两个类已经实现了menu分别是ColorMenu, DateMenu
ColorMenu 是什么 ?
我们加到右键菜单中看一下
var colorMenu = new Ext.menu.ColorMenu();
Ext.getDoc().on("contextmenu",function(e){
	e.stopEvent();
	colorMenu.showAt(e.getXY());
})	




哦 原来是传说中的颜色选择器。
我们并没有向menu里放任何东西,如何将颜色呈现出来呢?
实际上ColorMenu是继承menu 并在new 的时候是将ColorItem子项加载到menu里面了,
也就是实际上他是menu菜单中只有一个子项就是ColorItem。

DateMenu和DateItem也是同样的关系
var dateMenu = new Ext.menu.DateMenu();
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		dateMenu.showAt(e.getXY());
	})

当然我们要知道我们选中的日期是什么,可以在dateMenu中添加事件
select : ( DatePicker picker, Date date )
表示选择事件 包含两个参数 日期选择,所选日期
	var dateMenu = new Ext.menu.DateMenu();
	dateMenu.on("select",function(picker,date){
		Ext.Msg.alert("选中的日期",date);
	})
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		dateMenu.showAt(e.getXY());
	})


不过我们发现这个格式实在不是我们想要的
我们可以通过Date的formet方法进行指定格式
	var dateMenu = new Ext.menu.DateMenu();
	dateMenu.on("select",function(picker,date){
		Ext.Msg.alert("选中的日期",date.format("Y-m-d"));
	})
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		dateMenu.showAt(e.getXY());
	})


我们也可以定义出自己的格式常量,以后format的时候直接使用格式常量的方式
Date.patterns = {
    ISO8601Long:"Y-m-d H:i:s",
    ISO8601Short:"Y-m-d",
    ShortDate: "n/j/Y",
    LongDate: "l, F d, Y",
    FullDateTime: "l, F d, Y g:i:s A",
    MonthDay: "F d",
    ShortTime: "g:i A",
    LongTime: "g:i:s A",
    SortableDateTime: "Y-m-d\\TH:i:s",
    UniversalSortableDateTime: "Y-m-d H:i:sO",
    YearMonth: "F, Y"
	};

	var dateMenu = new Ext.menu.DateMenu();
	dateMenu.on("select",function(picker,date){
		Ext.Msg.alert("选中的日期",date.format(Date.patterns.FullDateTime));
	})
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		dateMenu.showAt(e.getXY());
	})





同样颜色选择器中也有相应的事件,也有一个select事件
select : ( ColorPalette palette, String color )
分别传入颜色选择器和选中的颜色
var colorMenu = new Ext.menu.ColorMenu();
	colorMenu.on("select",function(palette,color){
		Ext.Msg.alert("选中的颜色值",color);
	});
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		colorMenu.showAt(e.getXY());
	})





只有一级菜单已经不能满足我们了 下面我们来看看二级菜单的实现
	var menu = new Ext.menu.Menu({
		items:[{text:"选项一"},"-",{text:"日期选项",menu:new Ext.menu.DateMenu()}]
	});
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		menu.showAt(e.getXY());
	})


	Date.patterns = {
    ISO8601Long:"Y-m-d H:i:s",
    ISO8601Short:"Y-m-d",
    ShortDate: "n/j/Y",
    LongDate: "l, F d, Y",
    FullDateTime: "l, F d, Y g:i:s A",
    MonthDay: "F d",
    ShortTime: "g:i A",
    LongTime: "g:i:s A",
    SortableDateTime: "Y-m-d\\TH:i:s",
    UniversalSortableDateTime: "Y-m-d H:i:sO",
    YearMonth: "F, Y"
	};

	var dateMenu = new Ext.menu.DateMenu();
	dateMenu.on("select",function(picker,date){
		Ext.Msg.alert("选中的日期",date.format(Date.patterns.FullDateTime));
	})
	var menu = new Ext.menu.Menu({
		items:[{text:"选项一"},"-",{text:"日期选项",menu:dateMenu},
			{text:"颜色选项",menu:new Ext.menu.ColorMenu()}]
	});
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		menu.showAt(e.getXY());
	})

menu:可以是对象 也可以是配置选项
var menu = new Ext.menu.Menu({
		items:[{text:"选项一"},"-",{text:"日期选项",menu:{items:[{text:"子菜单"}]}},
			{text:"颜色选项",menu:new Ext.menu.ColorMenu()}]
	});


回到api好好看看menu的items选项 他是一个混合器类型

下面我们看看menu中的其它item
	var titem = new Ext.menu.TextItem("文本选项");//文本item
	var titem2 = new Ext.menu.TextItem("文本选项");//文本item
	var sitem = new Ext.menu.Separator();//分隔符
	var citem = new Ext.menu.CheckItem({text:"check",checked:true});
	
	var citem1 = new Ext.menu.CheckItem({text:"check",checked:true,group:"g"});
	var citem2 = new Ext.menu.CheckItem({text:"check",group:"g"});
	var citem3 = new Ext.menu.CheckItem({text:"check",group:"g"});
	var menucg = new Ext.menu.Menu({
		items:[citem1,citem2,citem3]
	});
	var menu = new Ext.menu.Menu({
		items:[titem,sitem,titem2,citem,{text:"请选择",menu:menucg}]
	})
	Ext.getDoc().on("contextmenu",function(e){
		e.stopEvent();
		menu.showAt(e.getXY());
	})

TextItem是文本选项 也就是前面没有图标站位符
Separator 相当于'-'分割符
CheckItem选择框 也可以组成选择按钮组 通过group选项


  • 大小: 4.4 KB
  • 大小: 6.1 KB
  • 大小: 8.3 KB
  • 大小: 9.2 KB
  • 大小: 5.6 KB
  • 大小: 14.8 KB
分享到:
评论

相关推荐

    extjs2.1库文件

    4. **事件处理**:ExtJS 2.1的事件驱动模型使得用户交互变得简单,每个组件都有一系列预定义的事件,通过监听和响应这些事件,可以实现组件间的交互和业务逻辑。 5. **Ajax和JsonP**:ExtJS 2.1支持Ajax和JsonP通信...

    extjs2.1 开发包

    EXTJS 2.1 是一个历史悠久但依然备受推崇的JavaScript框架,主要用于构建富客户端Web应用程序。这个开发包因其强大的功能和灵活性,使得开发者能够创建出与Windows操作系统界面类似的交互式用户体验。EXTJS的核心...

    ExtJS入门教程-超级详细-共36页 完整版 PDF

    ExtJS入门教程-超级详细-共36页 完整版 PDF,电子书方便阅读和分享。

    extJs 2.1学习笔记

    1. ExtJs 结构树 2 2. 对ExtJs的态度 3 3. Ext.form概述 4 4. Ext.TabPanel篇 5 5. Function扩展篇 7 6. Ext.data.Store篇 10 7. Ext.data.JsonReader篇一 12 8. Ext.data.JsonReader篇二 15 9. Ext.data.HttpProxy...

    ExtJs常用布局--layout详解实例代码

    ExtJs常用布局--layout详解实例代码: ExtJs常见的布局方式有:border、form、absolute、column、accordion、table、fit、card、anchor 另外,不常见的布局有:tab、vbox、hbox 具体使用方法可见该文件的案例代码。 ...

    Extjs2.1源码%2B教程.rar

    标题中的“Extjs2.1源码%2B教程.rar”指的是包含ExtJS 2.1版本的源代码以及相关教程的压缩文件,这对于开发者来说是一个宝贵的资源,尤其是对于那些想要深入理解ExtJS工作原理或者学习如何使用这个框架的人来说。...

    extjs-620-docs.zip

    extjs-620-docs官方文档extjs-620-docs官方文档extjs-620-docs官方文档

    extjs-theme-bootstrap

    "extjs-theme-bootstrap" 是针对 EXTJS4 的一个主题,它借鉴了 Bootstrap 的设计风格,让 EXTJS4 应用程序具有更加现代化和一致的外观。 Bootstrap 是一个流行的前端开发框架,由 Twitter 推出,主要用于构建响应式...

    ExtJS快速入门--传智播客--蔡世友

    ExtJS快速入门--传智播客--蔡世友

    「extjs入门教程-SSHMavenExtjs4MySQL实战开发」.docx

    【EXTJS 入门教程-SSH Maven Extjs4 MySQL实战开发】是一份详细的教程,旨在帮助初学者掌握EXTJS框架,结合SSH(Struts2、Spring、Hibernate)和Maven,利用MySQL数据库进行Web应用程序的开发。EXTJS是一个强大的...

    语言程序设计资料:ExtJs学习笔记-2积分.doc

    语言程序设计资料:ExtJs学习笔记-2积分.doc

    ExtJS2Samples-v2.1.zip_DEMO_ExtJS2Samples_extjs

    这个"ExtJS2Samples-v2.1.zip_DEMO_ExtJS2Samples_extjs"压缩包包含的是ExtJS 2.1版本的官方示例,是学习和理解ExtJS 2.0核心功能的宝贵资源。在深入探讨之前,让我们先了解下ExtJS的基本概念。 ExtJS 是由Sencha...

    extJs-5.0.1-gpl(part1)

    extJs-5.0.1-gpl附带sencha cmd安装程序、ruby编译包(分为32位和64位)和教程,一共四部分

    extjs2----关于extjs 的使用,操作

    2. **基础组件**:介绍如窗口(Window)、面板(Panel)、按钮(Button)、菜单(Menu)等基础组件的用法,包括它们的创建、配置和事件处理。 3. **布局管理**:解释ExtJS的布局系统,如Fit布局、Form布局、Table...

    EXTJS---完整数据库代码,全网唯一,非常适合EXTJS搭建框架,包含动态树,菜单等

    EXTJS中的树菜单(TreeMenu)是TreePanel的一个变体,通常用作下拉菜单。它结合了树的层次结构和菜单的功能,用户可以通过选择不同的菜单节点来执行相应的操作。这种设计使得复杂的操作结构变得更加直观和易用。 3....

    Ext2.1中文文档

    EXTJS 2.1中文文档提供了对EXTJS这一JavaScript库的详细解读,是开发者学习和理解EXTJS的重要参考资料。EXTJS是一种用于构建富客户端Web应用的框架,它以组件化和可扩展性著称,提供了丰富的用户界面组件,如表格、...

    extjs-theme-bootstrap-master.zip

    "extjs-theme-bootstrap-master.zip" 文件很可能是ExtJS的一个主题包,它集成了Bootstrap的样式,使得ExtJS组件能够呈现出Bootstrap的经典外观。 在深入讲解这个主题之前,让我们先了解一下基础概念: 1. **ExtJS*...

    extjs-OA extjs-oa

    一个extjs的OA项目 extjs-OA extjs-oaextjs-OA extjs-oa

Global site tag (gtag.js) - Google Analytics