【问题标题】:Disabling the snapping-grid in fabricjs在fabricjs中禁用捕捉网格
【发布时间】:2016-08-09 00:55:01
【问题描述】:

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

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

如何禁用此功能,例如,在单击按钮时?

我尝试使用标志 isGridEnabled 并做:

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

但对象仍然对齐网格!

【问题讨论】:

    标签: canvas fabricjs


    【解决方案1】:

    使用 .off 从 Fabric 画布中删除事件处理程序。

    我将引用 kangax(Fabric.js 的创建者)在对 a similar question 的评论中发布的内容:

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

    Official docsrelated Stack Overflow answer.)

    然后只需将事件侦听器添加到按钮或其他元素。

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

    在你的情况下,你可以这样重构你的代码:

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

    【讨论】:

    • 你找到这个问题的答案了吗?
    • 我确实做到了。 And what a fine answer it is!
    • 我假设您使用了此处提供的那个,但您从未接受过答案。您已经看到了我的问题,我使用了一个复选框,并希望在未选中该复选框时将其关闭。我该怎么做,或者你有一个工作小提琴,所以我可以看到完整的东西(我更好地想象它)
    • 据我了解,用户只会收到您的评论通知 (1) 如果您直接评论该用户的帖子,或者 (2) 如果您在用户名前添加 @ 符号。由于您没有对 Mohit Chawla 的问题发表评论,他可能没有看到您的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2017-06-09
    • 2020-12-20
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多