`
it_liuyong
  • 浏览: 100549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex 按钮同时监听单击和双击事件

    博客分类:
  • flex
 
阅读更多
有时我们在一些应用实例中可能会遇到这么一种需求:同一个组件,比如一个 button,需要同时监听单击 click 和 双击 double click 事件。通常在列表中,这种需要更为常见一些。例如有左右两个分栏列表,点击选中,可以作一些操作;双击列表项则可以将一侧列表项移动到另一侧。
我们知道,在 Flex 里面,有 click 事件和 doubleClick 事件。click 用于处理单击,doubleClick 用于处理双击。于是,我们可以写出下面的代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark"
       xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955" minHeight="600">

<fx:Script>
<![CDATA[

private function clickHandler(event:MouseEvent):void
{
label.text += "click\n";
}

private function doubleClickHandler(event:MouseEvent):void
{
label.text += "double click\n";
}

]]>
</fx:Script>
<s:layout>
<s:VerticalLayout />
</s:layout>

<s:Button label="hello, world"
                  click="clickHandler(event)"
                  doubleClickEnabled="true"
                  doubleClick="doubleClickHandler(event)"/>

<s:Label id="label" />
</s:Application>我们希望当点击 button 的时候,label 显示 click;双击的时候则显示 double click。然而,运行一下程序会发现,双击按钮时,label 会显示一个 click 一个 double click。这是由于 double click 属于双击,双击其实由两个单击组成。因此,Flex 在检测到双击的同时,也发现了单击。



解决方案是,我们在 click 事件中添加一个延时。在 click 事件发出时,启动延时机制,如果在一小段时间中没有检测到第二次点击,则认为这就是一个 click 事件,执行这个 click 事件的处理函数;如果在延时期检测到第二次点击,则认为是一个 double click 事件,执行 double click 事件的处理函数。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark"
       xmlns:mx="library://ns.adobe.com/flex/mx"
               minWidth="955" minHeight="600">

<fx:Script>
<![CDATA[

private var interval : Number = 0;

private function clickHandler(event:MouseEvent):void
{
clearInterval(interval);
interval = setInterval(deferredClickHandler, 200);
}

private function deferredClickHandler() : void
{
label.text += "click\n";
clearInterval(interval);
}

private function doubleClickHandler(event:MouseEvent):void
{
clearInterval(interval);
label.text += "double click\n";
}

]]>
</fx:Script>
<s:layout>
<s:VerticalLayout />
</s:layout>

<s:Button label="hello, world"
                  click="clickHandler(event)"
                  doubleClickEnabled="true"
                  doubleClick="doubleClickHandler(event)"/>

<s:Label id="label" />
</s:Application>在这段代码中,click 事件使用 setInterval() 函数设置一个 200 毫秒的延时。延时的回调函数是 deferredClickHandler()。如果延时结束,则执行 deferredClickHandler() 函数中的语句,也就是单击事件的实际处理语句。最后不要忘记 clear 这个定时器。如果是双击,则会进入 doubleClickHandler() 回调函数。在这个函数中,首先要停止计时器,然后再执行所需要的操作。这样,我们就利用一个延时的定时器,实现了同时处理单击和双击事件这一需求。



值的说明的是,这一技术不仅用于 Flex,同时可以用于 js 等页面技术。

本文代码使用 Flex 4.5.1 测试通过。

分享到:
评论

相关推荐

    使用Timer实现FLEX单击双击分离响应

    标题中的“使用Timer实现FLEX单击双击分离响应”是指在Adobe Flex应用程序开发中,如何通过使用Timer类来区分用户的单击事件和双击事件。在Flex中,用户界面的交互是通过事件驱动的方式进行的,单击和双击事件也不...

    flex点击按钮或双击实现全屏

    1. **设置双击事件**: 通过将`doubleClickEnabled`属性设置为`true`,启用双击事件。在初始化函数中,我们监听了`MouseEvent.DOUBLE_CLICK`事件。 2. **切换全屏函数** (`toggleFullScreen`): 当双击事件发生时调用...

    Flex 通过年月控制日历

    本文将详细探讨如何在Flex中通过年月控制日历,包括年月控件、日历控件(包含阴历和阳历)、年月控件与日历控件的级联以及封装日历控件的单击和双击事件处理。 首先,让我们了解年月控件。在Flex中,我们可以创建...

    30多个 flex3 源码(整理)

    2. **判断鼠标是双击还是单击**:在Flex编程中,我们可以通过监听MouseEvent类的`click`和`doubleClick`事件来区分鼠标单击和双击。通过设置合适的事件处理器,可以为不同的操作提供相应的响应。 3. **图表/线状图/...

    Jquery flexigrid插件 添加checkbox,(双击事件)onRowDblclick

    总的来说,Jquery Flexigrid插件提供了强大的数据展示和交互能力,通过合理的配置和事件监听,我们可以构建出符合用户需求的交互式数据表格。对于初学者来说,理解并熟练运用这些特性,能够提升web应用的用户体验。...

    gestouch手势触控插件FLEX

    Gestouch插件,全称为Gestouch for Flex,是一个专门为Flex项目设计的手势识别库,它能够帮助开发者轻松地实现各种触摸手势,如单击、双击、滑动、旋转、缩放等。这一插件不仅适用于桌面应用,也广泛应用于手机和...

    hmtl 多列选择

    - **双击选择**:通过监听`dblclick`事件,当用户双击某个选项时,可以执行相应的选择操作。 4. **事件处理**: jQuery提供了丰富的事件处理方法,如`.click()`, `.change()`, `.mouseover()`, `.mouseout()`等,...

    teamcenter安装

    单击“下一步”。 3. 选择“Yes”继续。 4. 勾选“Install database software only”选项进行数据库软件的独立安装。 5. 选择“Single instance database installation”进行单一实例数据库安装。 6. 按照向导...

    jmeter图文入门教程

    JMeter支持的Web相关协议包括HTTP和HTTPS,以及Web 1.0、Web 2.0(例如Ajax)、Flex、Flash和Flex-WS-AMF等。此外,JMeter还支持SOAP/XML-RPC的Web服务、通过JDBC驱动的数据库测试、LDAP目录服务,以及通过...

Global site tag (gtag.js) - Google Analytics