use*_*403 7 javascript addeventlistener scala.js
在JavaScript中,addEventListener()方法使用如下:
object.addEventListener("click", myScript);
Run Code Online (Sandbox Code Playgroud)
在Scala.js中:我有一个画布,我想只听画布上的点击,而不是整个文档.在Scala.js.dom库中,addEventListener定义为:
def addEventListener(`type`: String, listener: js.Function1[Event, _], useCapture: Boolean = ???): Unit = ???
Run Code Online (Sandbox Code Playgroud)
我不确定"useCapture"是指什么.但我试过:
dom.document.getElementById("canvas").addEventListener("click", {
(e:dom.MouseEvent) => { /*do something*/ }
}, false)
Run Code Online (Sandbox Code Playgroud)
我得到的错误信息:
found : org.scalajs.dom.MouseEvent => Unit
required: scala.scalajs.js.Function1[org.scalajs.dom.Event, _]
Run Code Online (Sandbox Code Playgroud)
有人可以解释"useCapture"引用的内容,以及如何在Scala.js中正确使用addEventListener吗?
你得到的错误信息是一个完全正常的类型错误:addEventListener期望a js.Function1[dom.Event, _],但你给它一个js.Function1[dom.MouseEvent, _].由于第一个参数处于逆变位置,因此不会进行类型检查.
有两种解决方案:要么你让你的函数采取a dom.Event,然后你投射到dom.MouseEvent,像这样:
canvas.addEventListener("click", { (e0: dom.Event) =>
val e = e0.asInstanceOf[dom.MouseEvent]
...
}, false)
Run Code Online (Sandbox Code Playgroud)
或者您使用onclick哪种更精确的类型:
canvas.onclick = { (e: dom.MouseEvent) =>
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3394 次 |
| 最近记录: |