本文介绍了禁用fabricjs中的捕捉网格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我设法使用四舍五入将对象捕捉到网格。

I managed to snap the objects to grid using round-off.

canvas.on('object:moving', function(options) {
    options.target.set({
        left: Math.round(options.target.left / grid) * grid,
        top: Math.round(options.target.top / grid) * grid
    });
});

如何禁用这个,比如说,点击按钮?

How do I disable this, say, on button click?

我尝试使用标志isGridEnabled并执行:

I tried using a flag isGridEnabled and doing:

canvas.on('object:moving', function(options) {
    options.target.set({
        left: options.target.left,
        top: options.target.top 
    });
});

但对象仍然捕捉到网格!

but the object(s) still snap to grid!

推荐答案

使用 .off 从Fabric画布中移除事件处理常式。

Use .off to remove an event handler from a Fabric canvas.

我会引用在注释中发布的kangax(Fabric.js的创建者):

I'll quote what kangax (the creator of Fabric.js) posted in a comment to a similar question:

function f(opts) {
    eventHandler(opts, arg1, arg2)
}
canvas.on('object:over', f);
canvas.off('object:over', f);

(和。)

然后只需向按钮或其他元素添加事件监听器。

Then just add an event listener to a button or other element.

el.addEventListener('click', function(){
    canvas.off('object:over', f);
});

在这种情况下,您可以通过这种方式重构代码:

In your case, you might refactor your code this way:

function activateGrid(options) {
    options.target.set({
        left: Math.round(options.target.left / grid) * grid,
        top: Math.round(options.target.top / grid) * grid
    });
}

onButton.addEventListener('click', function() {
    canvas.on('object:moving', activateGrid);
});

offButton.addEventListener('click', function() {
    canvas.off('object:moving', activateGrid);
});

这篇关于禁用fabricjs中的捕捉网格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-14 16:19