javascript - 用于在 fabricjs 画布上选择对象的事件处理程序
问题描述
我有一个包含一些元素的画布,当用户在画布上选择一个元素(单击一个元素)时,我想添加一个事件处理程序。
我尝试使用selection: created
和object: selected
事件来处理相同的问题,但它仅在用户选择一个元素然后单击画布中的其他位置然后尝试选择另一个元素时才能正常工作,但是当用户单击一个元素时(事件处理程序触发),然后单击事件处理程序未触发的另一个元素。我该如何处理?
我看到有一个选项可以使用这里提到的问题selection:created
和
selection:updated
https://github.com/fabricjs/fabric.js/issues/4886
但是有没有办法可以一起使用它们?
const canvas = new fabric.Canvas('paper', {
preserveObjectStacking: true,
enableRetinaScaling: false,
imageSmoothingEnabled: false
});
canvas.setHeight(500);
canvas.setWidth(700);
const red = new fabric.Rect({
id: 'red',
left: 10,
top: 10,
width: 100,
height: 100,
fill: 'red'
});
const green = new fabric.Rect({
id: 'green',
left: 150,
top: 150,
width: 100,
height: 100,
fill: 'green'
});
canvas.add(red);
canvas.add(green);
canvas.renderAll();
canvas.on("selection:created", function(obj){
alert(obj.target.id)
});
canvas.on("selection:updated", function(obj){
alert(obj.target.id)
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.2.3/fabric.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<canvas id="paper" width="400" height="400" style="border:1px solid #ccc"></canvas>
解决方案
这是一个非常简单的解决方案,用于将两个事件处理程序结合起来并将它们链接到同一个方法,这将是一个简单的解决方案,任何更好的解决方案将不胜感激。
canvas.on({
'selection:updated': HandleElement,
'selection:created': HandleElement
});
function HandleElement(obj){
//Handle the object here
}
推荐阅读
- apache-spark - persist(DISK_ONLY) 与手动保存到 HDFS 并回读之间的差异
- google-cloud-platform - 我正在学习 BigQuery 教程,刷新了页面,但无法取回
- php - 在内部数组中搜索项目
- sql - 如果子查询不提供任何输出 {Oracle},如何返回默认值
- rust - 如何在 Rust 和 C++ 之间安全地共享对象?
- javascript - 从 AJAX HTTP responseText 中提取数据
- reactjs - 设置了反应客户端的信号器出现 CORS 错误
- python - 生成随机 AES 密钥,将其转换为字符串并返回字节(Python)
- ios - 我在 Xcode 项目的 git 中有大量“未跟踪的文件”
- powershell - PowerShell:Invoke-RestMethod - 显示百分比进度