Actionscript 3 ActionScript MouseEvent';s单击与双击
不能在同一个显示对象上同时单击和双击吗?我正在尝试将这两种方法都用于阶段,双击阶段添加一个新对象,并在阶段上单击一次取消选择一个选定对象 看起来双击将执行自身以及双击路径中的第一次单击功能(鼠标下、鼠标上、单击、鼠标下、鼠标上、双击) 在我使用的其他语言中,有一个内置的计时器将这两种语言区分开来。这在AS3中不可用吗Actionscript 3 ActionScript MouseEvent';s单击与双击,actionscript-3,click,mouseevent,double-click,Actionscript 3,Click,Mouseevent,Double Click,不能在同一个显示对象上同时单击和双击吗?我正在尝试将这两种方法都用于阶段,双击阶段添加一个新对象,并在阶段上单击一次取消选择一个选定对象 看起来双击将执行自身以及双击路径中的第一次单击功能(鼠标下、鼠标上、单击、鼠标下、鼠标上、双击) 在我使用的其他语言中,有一个内置的计时器将这两种语言区分开来。这在AS3中不可用吗 使现代化 这里有一些代码。基本上,我想要的是一个或另一个,而不是双击两个 stage.doubleClickEnabled = true; stage.addEventListe
使现代化 这里有一些代码。基本上,我想要的是一个或另一个,而不是双击两个
stage.doubleClickEnabled = true;
stage.addEventListener(MouseEvent.DOUBLE_CLICK, twoClicks, false, 0, true);
stage.addEventListener(MouseEvent.CLICK, oneClick, false, 0, true);
function oneClick(evt:MouseEvent):void
{
trace("One CLICK");
}
function twoClicks(evt:MouseEvent):void
{
trace("Two CLICKS");
}
//oneClick trace = "One CLICK"
//twoClicks trace = "One CLICK Two CLICKS" (instead of just Two CLICKS)
您是否将
.doubleClickEnabled
设置为true
您还应该看一看。您是否将
.doubleClickEnabled
设置为true
您还应该看一看。嗯,您可以使用
setTimeout
和cleartimout
看起来是这样的:
const var DOUBLE_CLICK_SPEED:int = 10;
var mouseTimeout;
function handleClick(evt:MouseEvent):void {
if (mouseTimeout != undefined) {
twoClicks();
clearTimeout(mouseTimeout);
mouseTimeout = undefined;
} else {
function handleSingleClick():void {
oneClick();
mouseTimeout = undefined;
}
mouseTimeout = setTimeout(handleSingleClick, DOUBLE_CLICK_SPEED);
}
}
function oneClick(evt:MouseEvent):void {
trace("One CLICK");
}
function twoClicks(evt:MouseEvent):void {
trace("Two CLICKS");
}
stage.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
您可以使用
setTimeout
和cleartimout
看起来是这样的:
const var DOUBLE_CLICK_SPEED:int = 10;
var mouseTimeout;
function handleClick(evt:MouseEvent):void {
if (mouseTimeout != undefined) {
twoClicks();
clearTimeout(mouseTimeout);
mouseTimeout = undefined;
} else {
function handleSingleClick():void {
oneClick();
mouseTimeout = undefined;
}
mouseTimeout = setTimeout(handleSingleClick, DOUBLE_CLICK_SPEED);
}
}
function oneClick(evt:MouseEvent):void {
trace("One CLICK");
}
function twoClicks(evt:MouseEvent):void {
trace("Two CLICKS");
}
stage.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);
回答得很好,谢谢你。我刚刚实现了您的解决方案并改进了几点,所以我想我应该把它放在这里以供将来参考(当然还有溢出社区的好处!)。首先,我无法在setTimeout返回的uint上测试undefined,因此我将undefined条件替换为==0条件。其次,我想立即提交一次单击的逻辑(只是为了获得更愉快的用户界面),所以我做了一些调整:
if (mouseTimeout != 0) {
// clicked within the timeout, handle as double click
// rollback single click logic
rollbackSingleClickHandler(e);
// commit double click logic
dblClickHandler(e);
clearTimeOut(mouseTimeout);
mouseTimeout = 0;
} else {
// first click of a click sequence
// commit single click logic
singleClickHandler(e);
function clearTime():void {
mouseTimeout = 0;
}
// register a timeout for a potential double click
mouseTimeout = setTimeout(clearTime, DOUBLE_CLICK_SPEED);
}
回答得很好,谢谢你。我刚刚实现了您的解决方案并改进了几点,所以我想我应该把它放在这里以供将来参考(当然还有溢出社区的好处!)。首先,我无法在setTimeout返回的uint上测试undefined,因此我将undefined条件替换为==0条件。其次,我想立即提交一次单击的逻辑(只是为了获得更愉快的用户界面),所以我做了一些调整:
if (mouseTimeout != 0) {
// clicked within the timeout, handle as double click
// rollback single click logic
rollbackSingleClickHandler(e);
// commit double click logic
dblClickHandler(e);
clearTimeOut(mouseTimeout);
mouseTimeout = 0;
} else {
// first click of a click sequence
// commit single click logic
singleClickHandler(e);
function clearTime():void {
mouseTimeout = 0;
}
// register a timeout for a potential double click
mouseTimeout = setTimeout(clearTime, DOUBLE_CLICK_SPEED);
}
当然可以。否则双击就不行了。我已经用代码更新了我的问题,这样你就可以看到我想做什么。是的,当然。否则双击就不行了。我用代码更新了我的问题,这样你就可以看到我想做什么。是的,唯一的问题是它不考虑系统控制面板中的用户配置,不管怎样,它是有效的。投票结果:)甚至可以在Flash中访问吗?对实际ClickHandler的调用缺少MouseeEvent,双击速度需要更高,大约300毫秒。除此之外,+1还必须添加一个双击处理程序:stage.doubleClickEnabled=true;stage.addEventListener(MouseEvent.双击,handleClick,false,0,true);是的,唯一的问题是它不考虑系统控制面板中的用户配置,不管怎样,它工作,投票:)甚至可以在Flash中访问吗?对实际的点击处理的调用缺少鼠标事件,DouffyLCKIX速度需要更高,大约300毫秒。除此之外,+1还必须添加一个双击处理程序:stage.doubleClickEnabled=true;stage.addEventListener(MouseEvent.双击,handleClick,false,0,true);你必须自己做。双击在实践中是非常无用的。我的意思是,如果你想听到双击,很可能是因为你想给一个单击分配一个动作,给一个双击分配一个不同的(独立的)动作。是的,这是我对其他开发SDK(如iPhone tapping)习以为常的事。但几个小时后,我成功地使用actionscript启用了单击和双击,而不必求助于任何计时器。我真的没有看到这里的问题。单击一次以取消选择不应妨碍尝试双击。那么,如果单次单击事件被触发怎么办?双击时是否要保留可能的选择?您必须自己进行。双击在实践中是非常无用的。我的意思是,如果你想听到双击,很可能是因为你想给一个单击分配一个动作,给一个双击分配一个不同的(独立的)动作。是的,这是我对其他开发SDK(如iPhone tapping)习以为常的事。但几个小时后,我成功地使用actionscript启用了单击和双击,而不必求助于任何计时器。我真的没有看到这里的问题。单击一次以取消选择不应妨碍尝试双击。那么,如果单次单击事件被触发怎么办?双击时是否要保留可能的选择?