kraken icon indicating copy to clipboard operation
kraken copied to clipboard

addEventListener中返回的Event需要添加PointerDeviceKind属性来兼容不同手势之间的差异

Open xuzhongpeng opened this issue 3 years ago • 12 comments

使用场景 | Use case

目前addEventListener返回的Event参数无法辨别手势类型,比如输入框拖动如果是触摸手势是文字滚动,如果是鼠标手势是选中文本

提案 | Proposal

addEventListener返回的Event的Touch添加一个kind(PointerDeviceKind)属性,告知调用者

xuzhongpeng avatar Jul 20 '22 15:07 xuzhongpeng

cc @answershuto

xuzhongpeng avatar Jul 20 '22 15:07 xuzhongpeng

目前标准里面没有 kind 的定义把。

XGHeaven avatar Jul 20 '22 15:07 XGHeaven

目前标准里面没有 kind 的定义把。

w3c里确实没有,但是我们在Element中定义一些组件时是需要根据手势的不同有不同的响应。 有两种方案

  1. Element中不使用addEventListener,使用Listener、TapGestureRecognizer等
  2. addEventListener中添加kind属性判断

w3c中定义的主要是给js使用(组件行为已经在浏览器中定义好),但是我们Element中使用是定义组件默认行为的

xuzhongpeng avatar Jul 20 '22 15:07 xuzhongpeng

如果 Element 是 DOM 对象的话,是不需要的,区分是通过监听 mousexxx 或者 touchxxx 事件来区分的。 如果是 Kraken 的 Dart 实现的那个 Element 的话,我理解也不用吧,也可以通过监听鼠标或者手指事件区分吧。

XGHeaven avatar Jul 20 '22 16:07 XGHeaven

如果 Element 是 DOM 对象的话,是不需要的,区分是通过监听 mousexxx 或者 touchxxx 事件来区分的。 如果是 Kraken 的 Dart 实现的那个 Element 的话,我理解也不用吧,也可以通过监听鼠标或者手指事件区分吧。

click、touch是有的,touchmove这种就无法区分是触摸还是鼠标触发

xuzhongpeng avatar Jul 21 '22 01:07 xuzhongpeng

touch 已经是触摸的封装了,更原子的应该是 Pointer 的概念,这里面可以涵盖设备类型信息,但是透出我建议可以先到 W3C 讨论一下,看看他们的建议。

answershuto avatar Jul 21 '22 03:07 answershuto

touch 已经是触摸的封装了,更原子的应该是 Pointer 的概念,这里面可以涵盖设备类型信息,但是透出我建议可以先到 W3C 讨论一下,看看他们的建议。

这里我认为跟W3C标准还不太一样,比如输入框富文本能力在移动端和PC端有些是不一样的,它在浏览器中是浏览器自己实现,对标到Kraken中是DOM Element实现,浏览器自己实现肯定是能知道自己是移动端还是PC端的手势,但是Kraken的Element中使用的addEventListener方法监听的手势就无法获取手势类型

这里addEventListener在浏览器是仅仅给JS调用的,在Kranken中还会给我们实现一些默认组件使用,这里场景就不一样了。

xuzhongpeng avatar Jul 21 '22 09:07 xuzhongpeng

因为之前有一个规划是做 Dart 侧的标准能力的透出,所以 addEventListener 的表现在 Dart 侧与前端应该是一致的(也就是符合 W3C 标准的),所以还是需要考虑标准中的实现。

answershuto avatar Jul 21 '22 09:07 answershuto

因为之前有一个规划是做 Dart 侧的标准能力的透出,所以 addEventListener 的表现在 Dart 侧与前端应该是一致的(也就是符合 W3C 标准的),所以还是需要考虑标准中的实现。

我想实现在Element中实现根据手势不同有不同的交互响应(例子就是输入框的touchmove在移动端上是文字滚动,在pc是文字选中),那目前是无法做到的吗

xuzhongpeng avatar Jul 24 '22 12:07 xuzhongpeng

https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType w3c已定义了pointerType

xuzhongpeng avatar Sep 12 '22 08:09 xuzhongpeng

https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType w3c已定义了pointerType

但这个是 PointerEvent 的概念,不会影响现有的 MouseEvent/TouchEvent 这些的。

XGHeaven avatar Sep 13 '22 03:09 XGHeaven

https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType w3c已定义了pointerType

但这个是 PointerEvent 的概念,不会影响现有的 MouseEvent/TouchEvent 这些的。

嗯嗯,可以在kraken中对PointerEvent进行支持,对需要判断PointerType的地方使用 pointer相关的事件

xuzhongpeng avatar Sep 14 '22 03:09 xuzhongpeng

https://github.com/openwebf/webf/issues/89 该pr合入此问题不复存在

xuzhongpeng avatar Jan 08 '23 08:01 xuzhongpeng