Flex 按鈕同時監聽單擊和雙擊事件

2022-01-14 03:10:31 字數 2127 閱讀 4203

有時我們在一些應用例項中可能會遇到這麼一種需求:同乙個元件,比如乙個 button,需要同時監聽單擊 click 和 雙擊 double click 事件。通常在列表中,這種需要更為常見一些。例如有左右兩個分欄列表,點選選中,可以作一些操作;雙擊列表項則可以將一側列表項移動到另一側。

我們知道,在 flex 裡面,有 click 事件和 doubleclick 事件。click 用於處理單擊,doubleclick 用於處理雙擊。於是,我們可以寫出下面的**:

<?xml version="1.0" encoding="utf-8"

?>

xmlns:s="library:"

xmlns:mx="library:"

minwidth="955" minheight="600"

>

[cdata[

private

function clickhandler(event:

mouseevent):

void

private

function doubleclickhandler(event:

mouseevent):

void]]

>

fx:script>

s:layout>

click="clickhandler(event)"

doubleclickenabled="true"

doubleclick="doubleclickhandler(event)"

/>

/>

我們希望當點選 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"

?>

xmlns:s="library:"

xmlns:mx="library:"

minwidth="955" minheight="600"

>

[cdata[

private

var interval :

number = 0

;private

function clickhandler(event:

mouseevent):

void

private

function deferredclickhandler():

void

private

function doubleclickhandler(event:

mouseevent):

void]]

>

fx:script>

s:layout>

click="clickhandler(event)"

doubleclickenabled="true"

doubleclick="doubleclickhandler(event)"

/>

/>

在這段**中,click 事件使用 setinterval() 函式設定乙個 200 毫秒的延時。延時的**函式是 deferredclickhandler()。如果延時結束,則執行 deferredclickhandler() 函式中的語句,也就是單擊事件的實際處理語句。最後不要忘記 clear 這個定時器。如果是雙擊,則會進入 doubleclickhandler() **函式。在這個函式中,首先要停止計時器,然後再執行所需要的操作。這樣,我們就利用乙個延時的定時器,實現了同時處理單擊和雙擊事件這一需求。

值的說明的是,這一技術不僅用於 flex,同時可以用於 js 等頁面技術。

本文**使用 flex 4.5.1 測試通過。

讓WinForm控制項同時使用單擊和雙擊事件

如果給乙個控制項同時新增了單擊事件和雙擊事件,那麼在觸發雙擊事件前必然會觸發單擊事件,為了解決這個問題,在網上一頓找,在msdn上找到了微軟提供的解決方法 英文好的同學可以不往下看了,d。其主要思想是 單擊滑鼠時,啟動乙個timer,timer起計時器作用,timer執行時間超過了一次雙擊滑鼠所用的...

labview區分單擊和雙擊

在labview中經常會遇到需要按鍵雙擊的時候,並且labview本身也確實提供了雙擊的事件。如下圖所示 但是這樣有乙個問題,檢測按鈕按下時,這個事件本身就先執行了一次,快速按下第二次時,會判斷出是雙擊事件,但是前面第一次按鍵已經執行了一次了,並且前面的按鍵事件不是雙擊事件。這個功能在只需要雙擊事件...

FLASH中的雙擊和單擊事件

flash中的雙擊和單擊事件 看到國外blog上的關於雙擊與單擊的事件.我試了一下挺有意思.沒準什麼時候能用上.原理就我們定義乙個時間間隔,如果是雙擊那麼一定會有乙個時間間隔,如果不是雙擊那這個時間間隔就會是空的.基於以下這種情況,事情就變得比較的簡單了.在場景中放置乙個按鈕,在主幀上加入如下 定入...