Javascript Scala.js:使用addEventListener向对象添加事件
在JavaScript中,addEventListener()方法的使用方式如下:Javascript Scala.js:使用addEventListener向对象添加事件,javascript,addeventlistener,scala.js,Javascript,Addeventlistener,Scala.js,在JavaScript中,addEventListener()方法的使用方式如下: object.addEventListener("click", myScript); canvas.addEventListener("click", { (e0: dom.Event) => val e = e0.asInstanceOf[dom.MouseEvent] ... }, false) 在Scala.js中:我有一个画布,我只想听到画布上的点击,而不是整个文档。在Scala.js
object.addEventListener("click", myScript);
canvas.addEventListener("click", { (e0: dom.Event) =>
val e = e0.asInstanceOf[dom.MouseEvent]
...
}, false)
在Scala.js中:我有一个画布,我只想听到画布上的点击,而不是整个文档。在Scala.js.dom库中,addEventListener定义为:
def addEventListener(`type`: String, listener: js.Function1[Event, _], useCapture: Boolean = ???): Unit = ???
我不确定“useCapture”指的是什么。但我试过:
dom.document.getElementById("canvas").addEventListener("click", {
(e:dom.MouseEvent) => { /*do something*/ }
}, false)
我得到的错误信息是:
found : org.scalajs.dom.MouseEvent => Unit
required: scala.scalajs.js.Function1[org.scalajs.dom.Event, _]
有人能解释一下“useCapture”指的是什么,以及如何在Scala.js中正确使用addEventListener吗
事件捕获是EventListener在上注册的过程
事件目标的祖先可以拦截给定类型的事件
在事件目标收到它们之前。捕获操作从
树的顶部,通常是文档,向下,使其成为
与下面描述的鼓泡对称相反。锁链
从树顶部到事件目标的EventTargets的
在事件初始分派之前确定。如果修改
在事件处理期间发生在树上,事件流将继续
基于树的初始状态
订单将是
内容2(首先定义,使用capture=true)
某物1(使用capture=true第二次定义)
注意第二个参考:订单不保证
捕获阶段
一个事件在被目标节点处理之前可以由一个目标祖先处理的过程
您得到的错误消息是一个完全正常的类型错误:
addEventListener
需要一个js.Function1[dom.Event,
,但您给它一个js.Function1[dom.MouseEvent,
。由于第一个参数处于逆变位置,因此不会进行类型检查
有两种解决方案:要么让函数接受dom.Event
,然后将其强制转换为dom.MouseEvent
,如下所示:
object.addEventListener("click", myScript);
canvas.addEventListener("click", { (e0: dom.Event) =>
val e = e0.asInstanceOf[dom.MouseEvent]
...
}, false)
或者您可以使用更精确键入的onclick
:
canvas.onclick = { (e: dom.MouseEvent) =>
...
}
关于
useCapture
,下面的代码片段来自:“指示此类型的事件将被分派到注册的侦听器,然后再分派到DOM树中它下面的任何EventTarget。”是否有+=
操作符(或类似操作符),例如canvas.onclick+={(e:DOM.MouseEvent)=>…}
@David Portarella:不,至少不在默认的scalajs dom外观中。也许有一个图书馆提供类似的东西。