6
我想用鼠标在bobril中移动SVG元素(圆圈)。我应该使用哪种生命周期组件方法?我试图使用onPointerDown
等,但这些方法只处理圆内的事件。我应该使用拖放还是有其他选项来移动整个SVG的圆圈?如何使用bobril框架移动SVG元素
我想用鼠标在bobril中移动SVG元素(圆圈)。我应该使用哪种生命周期组件方法?我试图使用onPointerDown
等,但这些方法只处理圆内的事件。我应该使用拖放还是有其他选项来移动整个SVG的圆圈?如何使用bobril框架移动SVG元素
的onPointerDown
,onPointerMove
和onPointerUp
组件生命周期方法(在bobril/index.tsIBobrilComponent
详细信息)是您需要的东西,但用多一点的代码。
使用bobril b.registerMouseOwner
与您的上下文onPointerDown
方法。
onPointerDown(ctx: ICtx, event: b.IBobrilPointerEvent) {
b.registerMouseOwner(ctx);
// Store the initial coordinates
ctx.lastX = event.x;
ctx.lastY = event.y;
return true;
},
然后你的组分可以在onPointerMove
方法甚至移动所述元件外部处理鼠标移动。你只需要确定你仍然是当前的主人。所以你的方法可以看,例如像这样:
onPointerMove(ctx: ICtx, event: b.IBobrilPointerEvent) {
if (!b.isMouseOwner(ctx))
return false;
if (ctx.lastX === event.x && ctx.lastY === event.y)
return false;
// Call handler if it is registered
if (ctx.data.onMove) {
ctx.data.onMove(event.x - ctx.lastX, event.y - ctx.lastY);
}
// Update coordinates
ctx.lastX = event.x;
ctx.lastY = event.y;
return true;
},
不要忘记发布您的注册。
onPointerUp(ctx: ICtx, event: b.IBobrilPointerEvent) {
b.releaseMouseOwner();
return true;
}
上面的示例将最后一个指针坐标存储到组件上下文ICtx
中。然后它可以用来提供deltaX
和deltaY
到onMove
处理程序。当您创建组件的节点时,可以通过输入数据注册该处理程序。
我只是添加它使其多点触控友好,您应该检查'event.id'并稍后忽略所有其他指针ID。并且要很好地倾听'onPointerCancel',因为浏览器决定应该回滚你所有的动作。 – Bobris