Disabling the snapping-grid in fabricjs

喜你入骨 提交于 2019-12-22 11:45:36

问题


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?

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!


回答1:


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

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);

(Official docs and related Stack Overflow answer.)

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);
});


来源:https://stackoverflow.com/questions/34751006/disabling-the-snapping-grid-in-fabricjs

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!