cordova - Fabric.js + IonicV3 - 'touch:gesture' 事件
问题描述
最近,我一直在尝试使用 fabric.js 在我的 IonicV3 应用程序中实现捏合和缩放。
正如fabric.js 文档here中给出的那样,我无法访问事件,并且在控制台中出现错误:
[Intervention] Ignored attempt to cancel a touchmove event with cancelable=false, for example because scrolling is in progress and cannot be interrupted.
这是我的代码:
this.canvas.on(
'touch:gesture', function (opt) {
opt.e.preventDefault();
opt.e.stopPropagation();
console.log("Fabric Canvas gesture Events----", opt);
var delta = opt.e.deltaY;
var pointer = this.canvas.getPointer(opt.e);
var zoom = this.canvas.getZoom();
zoom = zoom + delta / 200;
if (zoom > 20) zoom = 20;
if (zoom < 0.01) zoom = 0.01;
this.canvas.zoomToPoint({ x: opt.e.offsetX, y: opt.e.offsetY }, zoom);
});
这是 HTML 代码:
<ion-scroll scrollY="true" scrollX="true" style="width: 100%; height: 100%;" >
<div #pageContainer id="pageContainer" class="page" (click)="enableDisableObjetMove()" >
<canvas #canvas id="canvas"></canvas>
</div>
</ion-scroll>
尽管在 HTML 代码中我也尝试过删除 ion-scroll 标签 + 也尝试只保留 canvas 标签。
解决方案
因此,在挖掘了为什么在滚动过程中不允许 touchmove 之后,我发现了这个。我清楚地得到了我无法通过的事件canvas.on({touch:gesture' : (event) => {'Do Anything'})
一旦我得到事件,我所做的就是使用下面提到的代码在具有标准 fabric.js 缩放功能的 Ionic 应用程序中执行捏合和缩放
var delta = event.e.deltaY;
var pointer = this.canvas.getPointer(event.e);
var zoom = this.canvas.getZoom();
zoom = zoom + delta / 200;
if (zoom > 20) zoom = 20;
if (zoom < 0.01) zoom = 0.01;
this.canvas.zoomToPoint({ x: event.e.offsetX, y: event.e.offsetY }, zoom);
event.e.preventDefault();
event.e.stopPropagation();
代码可以从 fabric.js 文档中找到。这里
推荐阅读
- python - Qt 设计器 PySide2 项目中的“AttributeError:‘bool’对象没有属性‘shown_password’”
- javascript - 为什么 for...of 等待 Promise 解决而 .forEach() 没有?
- c# - 如何从 C# 中的 DateTimeOffset 获取分钟?
- coldfusion - Cold Fusion - 新服务器 - 客户端任务过多
- reactjs - 无法通过 webpack 模块联合使用 material-ui 导入组件
- python - 如何将重复的日期行分组到新列中
- google-chrome - 从 Chrome 开发工具导出大型 HAR 文件
- javascript - 我可以在 GoDaddy 共享主机上托管 Aurelia 应用程序吗?
- swift - SwiftUI - 使用警报更改视图
- db2 - Db2 不允许更新表,抛出错误说操作不完整