2***@qq.com
2***@qq.com
  • 发布:2025-07-21 18:01
  • 更新:2025-07-24 16:36
  • 阅读:88

canvas组件的@touchstart、@touchmove、@touchend获取的坐标是从屏幕左上角开始?

分类:uni-app x

canvas组件的@touchstart、@touchmove、@touchend获取的坐标是从屏幕左上角作为原点开始?
为什么不是从画布的左上角作为原点?

<canvas id="canvas" ref="canvas" style="width: 600rpx;height: 360rpx;"  
                            @touchstart="handleTouchStart" @touchmove="handleTouchMove"  
                            @touchend="handleTouchEnd"></canvas>  

handleTouchStart(e : TouchEvent) {  
                if (this.ctx != null) {  
                    const touch = e.touches[0];  
                    let x = touch.clientX  
                    let y = touch.clientY  
                    console.log(x, y)  
                }  
            },  

//other like this
2025-07-21 18:01 负责人:无 分享
已邀请:
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

x平台的 UniTouch 事件文档https://doc.dcloud.net.cn/uni-app-x/component/common.html#unitouchevent

canvas集成自 Element基类,返回的是相对于可见区域的位置,你可以自己 querySelector 来自己计算一下,位置一般是固定的。

  • 2***@qq.com (作者)

    canvas组件的宽高大小与实际的querySelector获取的宽高大小也不一致。用UniTouchEvent的clientX减去 Element基类getBoundingClientRect()下的矩形原点的x坐标,从开始的画布(0,0)绘制是正常,但是越往右计算,最终画布的点对应不上,原因就是宽高大小不一致,不知道是不是bug还是我哪里写错了。

    现在我改用DrawableContext充当画布了,手指绘制跟随计算都正常。。。。

    2025-07-24 16:51

要回复问题请先登录注册