addeventlistener接口(addeventlistener)

http://www.itjxue.com  2023-01-30 07:09  来源:未知  点击次数: 

如何监听各个GUI控件的交互事件

所有Widget类型的节点都支持addTouchEventListener和addClickEventListener这两个接口。可以通过些接口来接收触摸事件。

addTouchEventListener的使用步骤如下(C++):

1)准备好你的widget节点,在编辑器中开启交互(或在代码中setTouchEnabled(true))。

2)定义一个函数,形式如下

void

ACuteClass::onTouchEvent(cocos2d::Ref

*ref,

Widget::TouchEventType

touchType)

{

switch(touchType)

{

case

Widget::TouchEventType::BEGAN:

CCLOG("on

began");

break;

case

Widget::TouchEventType::MOVED:

CCLOG("on

moved");

break;

case

Widget::TouchEventType::ENDED:

CCLOG("on

ended");

break;

case

Widget::TouchEventType::CANCELED:

CCLOG("on

canceled");

break;

default:

CCLOG("impossible");

}

}

3)把这个函数传递给addTouchEventListener接口:

1

your_widget-addTouchEventListener(CC_CALLBACK_2(ACuteClass::onTouchEvent,

this));//CC_CALLBACK_2照着写,表示有两个参数的回调。

ok搞定。

addTouchEventListener的使用方法一样,不同的地方是:回调函数onTouchEvent在一次触摸中只回调一次,触发ENDED时回调。

关于点击没响应的可能:

没开启交互。

控件被挡住。

其他细节

1.

如何获取触摸事件的坐标

用下面这几个接口:

getTouchBeganPosition

getTouchMovePosition

getTouchEndPosition

看名字就知道获取的是什么了吧。

2.

关于ScrollView在某些情况下点到子控件不能拖动的问题

现在的Studio支持同时创建widget和非Widget类型的节点。这样会有一个问题。

Widget类型接受到触摸事件时,会把这些事件向上层传递,但是在遇到非Widget节点时会停下来。这会导致点击ScrollView等View类中的控件(两者之间有node)拖动时,拖动失败。

解决方案:

设置View中的控件的SwalloTouches属性为false。使控件不截断touch事件

改下源码:将如下代码替换掉Widget中同名函数。

void

Widget::propagateTouchEvent(cocos2d::ui::Widget::TouchEventType

event,

cocos2d::ui::Widget

*sender,

cocos2d::Touch

*touch)

{

Widget

*widgetParent

=

nullptr;

for(Node

*p

=

this;widgetParent

==

nullptr;)

{

p

=

p-getParent();

if(p)

{

widgetParent

=

dynamic_castWidget

*(p);

}

else

{

return;

}

}

widgetParent-interceptTouchEvent(event,

sender,

touch);

}

ui::TextField

类似于addTouchEventListener

1.设置交互或者setTouchEnabled(true)

2.编写一个监听函数:

void

yourClass::textFieldEvent(Ref

*pSender,

TextField::EventType

type)

{

switch

(type)

{

case

TextField::EventType::ATTACH_WITH_IME:

CCLOG("获得输入焦点");

break;

case

TextField::EventType::DETACH_WITH_IME:

CCLOG("获得输入焦点");

break;

case

TextField::EventType::INSERT_TEXT:

CCLOG("输入了文本");

break;

case

TextField::EventType::DELETE_BACKWARD:

CCLOG("获得输入焦点");

break;

default:

break;

}

}

3.设置监听:

yourTextField-addEventListener(CC_CALLBACK_2(yourClass::textFieldEvent,

this));

window.addeventlistener怎么用

以下是用法:

1、针对 window 对象触发的事件(应用到 body 标签):

2、Form 事件

由 HTML 表单内的动作触发的事件(应用到几乎所有 HTML 元素,但最常用在 form 元素中):

对计算机软件的维护主要有以下几点:

(1)对所有的系统软件要做备份。当遇到异常情况或某种偶然原因,可能会破坏系统软件,此时就需要重新安装软件系统,如果没有备份的系统软件,将使计算机难以恢复工作。

(2)对重要的应用程序和数据也应该做备份。

(3)经常注意清理磁盘上无用的文件,以有效地利用磁盘空间。

(4)避免进行非法的软件复制。

(5)经常检测,防止计算机传染上病毒。

(6)为保证计算机正常工作,在必要时利用软件工具对系统区进行保护。

总之,计算机的使用是与维护分不开的,既要注意硬件的维护,又要注意软件的维护。

addEventListener 为什么要加(false, 0, true);

它的五个参数分别是addEventlistener(事件类型,监听函数,是否打开捕获阶段,监听器优先级别,是否打开弱监听) 。

useCapture:Boolean (default = false) — 确定侦听器是运行于捕获阶段、目标阶段还是冒泡阶段。如果将 useCapture 设置为 true,则侦听器只在捕获阶段处理事件,而不在目标或冒泡阶段处理事件。如果 useCapture 为 false,则侦听器只在目标或冒泡阶段处理事件。要在所有三个阶段都侦听事件,请调用 addEventListener 两次:一次将 useCapture 设置为 true,一次将 useCapture 设置为 false. priority:int (default = 0) — 事件侦听器的优先级。优先级由一个带符号的 32 位整数指定。数字越大,优先级越高。优先级为 n 的所有侦听器会在优先级为 n -1 的侦听器之前得到处理。如果两个或更多个侦听器共享相同的优先级,则按照它们的添加顺序进行处理。默认优先级为 0。 useWeakReference:Boolean (default = false) — 确定对侦听器的引用是强引用,还是弱引用。强引用(默认值)可防止您的侦听器被当作垃圾回收。弱引用则没有此作用。类级别成员函数不属于垃圾回 收的对象,因此可以对类级别成员函数将 useWeakReference 设置为 true 而不会使它们受垃圾回收的影响。如果对作为嵌套内部函数的侦听器将 useWeakReference 设置为 true,则该函数将作为垃圾回收并且不再是永久函数。如果创建对该内部函数的引用(将该函数保存到另一个变量中),则该函数将不作为垃圾回收并仍将保持 永久。

js addeventlistener 怎么传参数

addEventListener的使用方式:?

target.addEventListener(type,?listener,?useCapture);?

target:?文档节点、document、window?或?XMLHttpRequest。?

type:?字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。?

listener?:实现了?EventListener?接口或者是?JavaScript?中的函数。?

useCapture?:是否使用捕捉,一般用?false?。

????例如:document.getElementById("testText").addEventListener("keydown",?function?(event)?{?alert(event.keyCode);?},?false);

什么是接口回调方式 有具体例子吗

首先理解回调的含义,回调就是当主程序需要的时候(或者到预定义状态值)调用的接口实现类。接口实际上不能被直接调用的,我们凡是能调用的一定不是接口或者抽象类。

接口回调的很多应用场景是出现在以接口类型为参数的情况下,以匿名内部类的方式传入而达到。

例如,假设有一个Java的API方法叫作:(其中的ClickEvent就是一个接口)

public void addEventListener(ClickEvent evt);

那么,你在调用的时候就可以这样:

addEventListener(new ClickEvent(){

//在这里实现接口中的方法

});

当发生某事件是,API的addEventListener方法就会被组件调用,从而你的完成的匿名内部类代码就会被组件执行。

仔细想想,其实很不是那么困难的。

addEventListener之handleEvent

addEventListener()

方法是将指定的事件监听器注册到目标对象上,当该对象触发指定的事件时,指定的回调函数就会被执行。

其中listener:当指定的事件类型发生时被通知到的一个对象。该参数必须是实现EventListener接口的一个对象或函数。即,第二个参数除了可以传入函数外,还可以传入对象。

也就是说事件会自动在传入对象中寻找handleEvent方法。

这样在 element 触发event事件后,调用的是handleEvent 方法,且其中的 this 是指实现EventListener接口的对象,这里指向obj对象。而普通的函数中的this 指向事件源:

这样就可以动态切换绑定事件的处理函数,而不需要remove之前的事件。

这样可以把不同事件的处理逻辑放到一起,根据事件类型区分即可,而不用为每个事件类型定义不同的处理函数了。因为处理逻辑都在同一对象中,也使程序更加“内聚”了。

DOM2标准不支持iE6,7,8

(责任编辑:IT教学网)

更多

推荐CMS技巧文章