在画布中使用Samsung S-Pen
Using Samsung S-Pen in Canvas
我正在开发一个web应用程序,用户应该能够在平板电脑上签署文档。我们使用Galaxy Tab 12.2是因为S-Pen具有所需的精度。我绘制的画布使用侦听要在画布上绘制的touch
事件。
canvas.addEventListener('touchstart', handleStart);
canvas.addEventListener('touchmove' , handleMove);
这里的问题是,如果用户用手指触摸画布,画布就会在那里划线。
有没有办法区分S-Pen事件和"正常"触摸事件?
我知道在带有Internet Expoler的Surface Pro 3上,我可以处理不同于手指输入的笔输入。
好的,所以我自己找到了一个运行良好的解决方案。SPen在radiusX
和radiusY
=0的情况下触发ontouch
事件。
用手指触发的事件的半径始终大于0。所以所有要做的就是添加
if(e.targetTouches[0].radiusX === 0)
进入事件处理程序,以便在我的画布上绘制。
查看此Jsfidle
S-Pen在靠近屏幕时应该触发onMouseOver
事件(取决于浏览器和S-Pen版本),您可以通过存储全局变量isSPen = false
并通过全局onMouseOver
事件将该变量设置为true
来利用这一点。尝试不同的浏览器,看看哪些浏览器会提供活动,通常股票浏览器总是工作得最好。
如果这不起作用,你可能需要将你的网页托管在应用程序容器中;安卓系统有一个OnHoverListener
可以接收S-Pen。您可以使用全屏幕WebView,并通过Android的JavaScript消息API与之通信:示例
希望我帮了你,祝你好运
pointerType属性可以通过"pointerdown"事件访问,而不是依赖于"mousedown"事件。