Flash的右键菜单

MX 2004~~AS2.0 以后才有此特性

先看一个例子: var my_cm = new ContextMenu();
my_cm.hideBuiltInItems();
my_cm.customItems.push( new ContextMenuItem("Sucy",func_1) );
my_cm.customItems.push( new ContextMenuItem("Alien",func_2) );
my_cm.customItems.push( new ContextMenuItem("Jinni",func_3) );
my_cm.customItems.sort();

function func_1() { trace(" Called Sucy!") }
function func_2() { trace(" Called Alien! ") }
function func_3() { trace(" Called Jinni! ") }

_root.menu = my_cm;


测试,点击鼠标右键,你看到了什么?哈哈,点击Alien,Jinni或Sucy就可以调用func_1,func_2和func_3。

其实,添加右键菜单的步骤十分简单:
  1.创建ContextMenu菜单对象。
  2.创建ContextMenuItem菜单项对象,并添加到ContextMenu对象中。
  3.为每个菜单项定制处理函数。
  4.应用菜单对象到MC,Button或TextField。

方法为:MoiveClip/Button/TextField instanceName.menu=ContextMenu instaceName;

  例如,my_btn.menu=my_cm;

  再回头看看这个例子的代码,关于右键菜单的核心部分的你已经知道得差不多了,他们是:

  a)new ContextMenu();
  创建一个ContextMenu对象。
  简单的说,它是一个容器,用来盛装用户定义的菜单项。
  除了像本例中的方式简单的创建外,还可以在创建的同时增加一个事件,这个事件将在用户点击右键出现菜单的时候发生。

  例:

   var my_cm = new ContextMenu(rightClick);
   function rightClick() {(" Right Clicked! ")}
   _root.menu = my_cm;

  点击鼠标右键,输出" Right Clicked! ";
其实到了这,你已经知道如何来使用右键事件了,遗憾的是,无论如何,菜单都是会弹出来,所以如果你想使用与菜单无关的右键效果,仍然会非常的不爽。 :(

  b)ContextMenu.hideBuiltInItems();
  ContextMenu对象的方法。

  功能从名字就可以看出来了,隐藏内建菜单项,例如copy,Zoom In等等,当然,settings和版权信息是不会隐藏的。

  另外,你要还要注意的是,自定义的菜单项不能起诸如copy,Zoom In等名字,否则他们不会起作用。

  c)ContextMenu.cutstomItems
  ContextMenu对象的属性。

  它是一个数组,存储着所有的用户定义的菜单项,因为菜单项本身是对象,所以这个数组的每一个元素都是对象。

  更妙的是,你可以用数组的操作方法来操作他,这对你来说一定不陌生。
  你可以用push()方法来项菜单中添加菜单项,并用cutstomItems[i]的方式访问它。
  而其他数组的方法你也可以善加利用:

  例如像本例中的方式,你可任意地添加菜单项,然后对cutstomItems使用sort()方法。

  最后出现的菜单就是按字母序排列的。
  另外,你也可以通过数组操作动态的改变菜单项的内容。

  d)new ContextMenuItem(caption,func)
  创建一个ContextMenuItem对象。
  caption: 菜单项的名称(注意刚才提到过的,不要和内建菜单同名)。
  caption也是ContextMenuItem的属性,含义相同。
  func: 菜单项被点击后对应的处理函数的名称。
  另外几个ContextMenuItem对象的属性也可以在创建对象的时候作为参数传递。

  (1)enabled: 菜单项是否可用。(不可用为灰色)默认为true。
  (2)separatorBefore:菜单项下面是否会出现分隔线(用于菜单分类)。默认为false。
  (3)visible: 菜单项是否可见。默认为true。

  完整的构造函数为:new ContextMenuItem(caption,func,separatorBefore,enabled,visible);
  例:

my_mc = new ContextMenuItem("Item",func_item,true,false,true);

  该方法创建了一个名为Item的菜单项,在它下面将出现菜单分隔线,该项目可见,但处于不可用状态,处理函数为func_item()。

  关于创建一个右键菜单最基本的东西你已经掌握了,下面来看一些额外的东西。
  e)ContextMenuItem.copy()
  ContextMenuItem对象的方法。

  返回一个菜单项对象的拷贝,返回值仍为ContextMenuItem对象。

  f)ContextMenuItem.onSelect
  ContextMenuItem对象的事件。
  当菜单项被选中时发生。该事件的处理函数实际上就是创建对象时的func。
  但是如果在创建对象后,对onSelect事件制定新的处理函数,则func不会生效。

  g)ContextMenu.copy()
  ContextMenu对象的方法,返回一个ContextMenu对象的拷贝。返回值仍是ContextMenu对象。

  h)ContextMenu.onSelect
  ContextMenu对象的事件。
  在用户调用菜单,且菜单出现之前发生。它可以让你根据鼠标所处位置来动态的创建菜单。
  该事件的处理函数可以有两个参数:

  my_cm.onSelect = function (item:Object, item_menu:ContextMenu)

  item: 当用户点击鼠标时,位于鼠标指针下方的对象实例,可以是MovieClip,按钮,文本域。

  这让你可以实现类似于操作系统的右键菜单的效果,即在不同的对像上面点击右键会出现不同的菜单。

  你可以用instanceOf来确定鼠标指针所指的对象的类型。

  item_menu:当前菜单对应的菜单项对象。
  例:(这是帮助中的例子)

my_cm = new ContextMenu();
menuHandler = function (obj:Object, menu:ContextMenu) {
if(obj instanceof MovieClip) {
trace("Movie clip: " + obj);
}
if(obj instanceof TextField) {
trace("Text field: " + obj);
}
if(obj instanceof Button) {
trace("Button: " + obj);
}
}
my_cm.onSelect = menuHandler;

_root.menu = my_cm;

  你可以在场景中建立几个mc,button和textfield,并在这些位置点击鼠标右键,看看有什么不同。

  g)ContextMenu.builtInItems
  ContextMenu对象的属性。

  它本身是一个对象,包含了以下几个布尔类型的属性,分别对应Flash Player的内建菜单项:

  save, zoom, quality, play, loop, rewind, forward_back, print。

  设置相应的属性为false会将其从菜单项中移除。

  例:

  my_cm = new ContextMenu();
  my_cm.bulidInItems.zoom = false;
  _root.menu = my_cm;

  测试,点击右键后,菜单中将不会出现zoom In/zoom Out 选项。
  如果想屏蔽所有的内建菜单项,请用ContextMenu.hideBuiltInItems()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值