gpt4 book ai didi

javascript - fabric.js - 在鼠标移动时结束自由绘图模式

转载 作者:行者123 更新时间:2023-11-30 08:28:42 24 4
gpt4 key购买 nike

我有一个应用程序允许用户在有限的时间内在织物 Canvas 中绘图。时间结束后,我想结束绘图模式,将画好的图保存为图片。

我的问题是,如果用户仍在绘图(拖动鼠标)时时间结束,则绘图将消失(再次单击 Canvas 后)。

下面的 fiddle 示例显示了我制作的应用程序,产生问题的步骤是:

  1. 运行 fiddle,立即开始绘图。
  2. 3 秒后超时事件发生,自由绘图模式结束。绘图将停止。
  3. 再次单击 Canvas 并拖动鼠标。
  4. 绘图将消失。

代码示例:

var canvas = new fabric.Canvas("c",{backgroundColor : "#fff"});
canvas.isDrawingMode = true;
canvas.freeDrawingBrush.color = "green";
canvas.freeDrawingBrush.width = 4;

setTimeout(stop_drawing, 3000);

function stop_drawing() {
canvas.isDrawingMode = false;
}

fiddle 示例:

https://jsfiddle.net/usaadi/808x5d20/1/

最佳答案

您可以模拟 library 中发生的事情:

_onMouseUpInDrawingMode: function(e) {
this._isCurrentlyDrawing = false;
if (this.clipTo) {
this.contextTop.restore();
}
this.freeDrawingBrush.onMouseUp();
this._handleEvent(e, 'up');
},

在您的情况下,您只需触发 onMouseUp 事件,因此您的函数 stop_drawing 将是:

function stop_drawing() {
canvas.isDrawingMode = false;
canvas.freeDrawingBrush.onMouseUp();

}

在我们的案例中 onMouseUp将是:

/**
* Invoked on mouse up
*/
onMouseUp: function() {
this._finalizeAndAddPath();
},

让我们看看它是如何工作的_finalizeAndAddPath :

     /**
* On mouseup after drawing the path on contextTop canvas
* we use the points captured to create an new fabric path object
* and add it to the fabric canvas.
*/
_finalizeAndAddPath: function() {
var ctx = this.canvas.contextTop;
ctx.closePath();

var pathData = this.convertPointsToSVGPath(this._points).join('');
if (pathData === 'M 0 0 Q 0 0 0 0 L 0 0') {
// do not create 0 width/height paths, as they are
// rendered inconsistently across browsers
// Firefox 4, for example, renders a dot,
// whereas Chrome 10 renders nothing
this.canvas.renderAll();
return;
}

var path = this.createPath(pathData);

this.canvas.add(path);
path.setCoords();

this.canvas.clearContext(this.canvas.contextTop);
this._resetShadow();
this.canvas.renderAll();

// fire event 'path' created
this.canvas.fire('path:created', { path: path });
}

此时绘制的路径已经添加到 Canvas 中。

我已经更新了您的代码段 here如果你想看看下面的代码......

一切顺利

var canvas = new fabric.Canvas("c", {
backgroundColor: "#fff"
});
canvas.isDrawingMode = true;
canvas.freeDrawingBrush.color = "green";
canvas.freeDrawingBrush.width = 4;

setTimeout(stop_drawing, 3000);

function stop_drawing() {
canvas.isDrawingMode = false;
canvas.freeDrawingBrush.onMouseUp();

}
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="c" width="500" height="500" style="border:1px solid #ccc"></canvas>

关于javascript - fabric.js - 在鼠标移动时结束自由绘图模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41112544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com